百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

怎样理解Linux硬链接和软链接?他们有什么区别?

nanshan 2024-10-25 13:10 20 浏览 0 评论

简介

我们现代的操作系统需要防止程序崩溃导致信息丢失,需要将信息存储在文件之中。而且文件能够被多个进程同时读取。在Linux中所以的资源,外设都抽象成了文件,所以就有了Linux中“一切皆文件”的特性。当然有文件,肯定是不够的,总不能把所有的文件放在一起管理,实在是太乱,不易管理维护。Linux就引入了目录的概念,在Windows中可以称之为文件夹。目录的引入就会让Linux的根文件系统外观上变成了一个层次分明的目录树。如下图:



目录是什么?

在Linux中“一切皆文件”,所以这个问题很好回答:目录也是文件。目录中记录的是目录下文件名。那既然是文件,如果在创建目录的时候,与当前目录下的文件或目录重名,就肯定会创建失败。

好了,既然搞清楚了目录的概念,我们接着往下看。

硬链接和软连接区别?

在Linux中表示一个文件的方式是通过两个部分来分别表示的:用户数据(user data)与元数据(meta data)。什么是用户数据呢?用户数据就是记录真实文件内容的数据,这些数据是存放在一个个大小相等的文件数据块中(data block)。

元数据呢?其实就是这个文件的附加信息属性,例如:创建时间,文件大小等等这类信息。我们用索引号(inode)来表示每一个不同文件的元数据(当然inode也是元数据的一部分)。在Linux中,inode才是表示文件的唯一标识,而不是文件名。下图展示了怎样通过文件名来找到文件内容的。注意:元数据中并不包含文件名。文件名只是为了方便用户识别和记忆罢了。




使用什么命令可以查看inode号?

可以使用stat和ls -i 命令查看,如下图所示:




什么是硬链接?

硬链接是指通过索引节点来进行连接。也就是存在多个文件名指向同一个inode。这样就可以将重要的文件建立硬链接,来防止“误删”的操作。

命令:

link oldfile newfile 

可以创建硬链接。硬链接的inode是相同的,但是文件名不同,所以它有一些特性:

  1. 文件有相同的inode和data blocks;
  2. 不能对不存在的文件创建硬链接
  3. 不能跨文件系统创建(因为在各自文件系统下inode是唯一的,当跨文件系统就会出现inode重复的情况发生
  4. 不能对目录创建,只能对文件进行创建
  5. 如果删除了一个硬链接文件,并不会影响其他的同inode文件(inode中存在链接计数器,删除一个硬链接相当于计数器减一,反之加一。直到为0,删除inode)




例如:

# ls -li 
total 0 
 
// 只能对已存在的文件创建硬连接
# link test.file test_hard.link 
link: cannot create link `test_hard.link' to `test.file': No such file or directory 
 
# echo "This is an original file" > test.file 
# cat test.file 
This is an original file 
# stat test.file 
 File: `test.file'
 Size: 25 Blocks: 8 IO Block: 4096 regular file 
Device: 807h/2055d Inode: 660650 Links: 2 
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) 
... 
// 文件有相同的 inode 号以及 data block 
# link test.file test_hard.link | ls -li 
total 8 
660650 -rw-r--r-- 2 root root 25 Sep 1 17:44 test_hard.link 
660650 -rw-r--r-- 2 root root 25 Sep 1 17:44 test.file 
 
// 不能交叉文件系统
# ln /dev/input/event5 /root/bfile.txt 
ln: failed to create test_hard link `/root/bfile.txt' => `/dev/input/event5': 
Invalid cross-device link 
 
// 不能对目录进行创建硬连接
# mkdir -p test.dir/test 
# ln test.dir/ test_hardlink.dir 
ln: `test.dir/': test_hard link not allowed for directory 
# ls -iF 
660650 test_hard.link 657948 test.dir/ 660650 test.file

具体的解释可以参考硬链接的5点特性。

什么是软链接?

软连接就和硬链接完全不同,软连接是用户数据(data blocks)中记录的是另一个文件的路径名的指向。可以理解为软连接其实就是一个普通的文件,只是他的内容非常的特殊。所以软连接有他自己的inode号以及data blocks。那我总结下软连接的特性:

  1. 软连接有自己的文件属性
  2. 可以对不存在的文件创建
  3. 软链接可以跨文件系统
  4. 软链接可以对目录创建
  5. 软链接创建不会造成链接计数器增加,因为就不是同一个inode
  6. 若链接的文件被删除了,该链接就是没有意义了,但是也可以重新创建。


下图展示下软链接的访问过程:



例如:

# ls -li 
 total 0 
 
 // 可对不存在的文件创建软链接
 # ln -s test.file test_soft.link 
 # ls -liF 
 total 0 
 789467 lrwxrwxrwx 1 root root 8 Sep 1 18:00 test_soft.link -> test.file 
 
 // 由于被指向的文件不存在,此时的软链接 test_soft.link 就是死链接
 # cat test_soft.link 
 cat: test_soft.link: No such file or directory 
 
 // 创建被指向的文件 test.file,test_soft.link 恢复成正常的软链接
 # echo "This is an original file_A" >> test.file 
 # cat test_soft.link 
 This is an original file_A 
 
 // 对不存在的目录创建软链接
 # ln -s test.dir test_soft.link.dir 
 # mkdir -p test.dir/test 
 # tree . -F --inodes 
 . 
├── [ 789497] test.dir/ 
│ └── [ 789498] test/ 
├── [ 789495] test.file 
├── [ 789495] test_soft.link -> test.file 
└── [ 789497] test_soft.link.dir -> test.dir/

具体的解释:略


觉得不错,记得关注,转发!

相关推荐

ssh终端xshell日志查看命令(xshell怎么看日志)

现在我们云服务器运维较多用的是SSH工具,其中常用的包括PUTTY、XSHELL等,其实大同小异界面UI稍微不同,但是都可以进入远程连接。这里有朋友提到如何查看服务器的日志文件,这个其实和是否使用XS...

使用 Fail Ban 日志分析 SSH 攻击行为

通过分析`fail2ban`日志可以识别和应对SSH暴力破解等攻击行为。以下是详细的操作流程和关键分析方法:---###**一、Fail2ban日志位置**Fail2ban的日志路径因系统配置...

如何高效读取Linux日志文件?这些命令要熟记于心!

在Linux系统中,日志文件通常存储在/var/log目录下。比如,/var/log/syslog(或/var/log/messages,视发行版而定)记录系统整体事件,/var/log/a...

Windows服务器远程登录日志查询方法,linux查看登录日志方法

概述本文介绍Windows、Linux服务器查询系统的远程登录日志方法。根据服务器所使用的操作系统不同,有以下两种查询方法。Linux操作系统的登录日志查询通过远程连接登录Linux服务器,使用roo...

iptables防火墙如何记录日志(防火墙日志查看)

例如:记录所有ssh服务的登录的日志首先,我们需要了解如何将所有的iptables的INPUT链数据包记录到/var/log/messages中。如果你已经有一些iptables规则了,那么将记录日志...

如何安全管理SSH密钥以防止服务器被入侵

SSH密钥安全管理实施指南(2025年更新版)一、密钥生成与存储规范高强度密钥生成bashCopyCodessh-keygen-ted25519-a100#生成ED25519算法密钥(比...

在CentOS上安装nginx服务器(centos搭建代理服务器)

一、环境描述1.虚拟机配置CPU:单核内存:2GB硬盘:120GBIP:10.24.17.1082.操作系统版本:CentOS6.6x86_64安装方式:Minimal3.虚拟化环境VM...

CentOS7安全加固的一份整理规划建议

◆更新系统:及时更新CentOS7操作系统版本和安全补丁,确保系统以最新状态运行。◆关闭不必要的服务:在运行系统时,应关闭不需要的服务和端口,以减少系统暴露的攻击面。◆安装防火墙:使用iptables...

第四十七天-二叉树,centOS安装tomcat,Maven,vsftpd

学习笔记:1.Maven是Apache下的一个纯Java开发的开源项目。基于项目对象模型(缩写:POM)概念,Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。Maven...

Linux远程桌面连接使用教程 Widows终端远程连接Linux服务器

一、前言为什么不是远程连接Linux服务器?因为我不会,远程连接window我就用电脑自带的“远程桌面连接”。以下所述都是在CentOS操作系统下的。服务器刚换成Linux的时候很迷茫,感觉无从下手...

CentOS 安全加固操作,保护你的操作系统

系统加固是保障系统安全的重要手段,对于维护企业数据安全、用户隐私以及系统稳定运行具有重要意义。加固后的系统更加健壮和稳定,能够有效减少因安全问题导致的系统故障和停机时间,提高系统的可用性和可靠性。通过...

Dockerfile部署Java项目(docker如何部署java项目)

1、概述本文主要会简单介绍什么是Docker,什么是Dockerfile,如何安装Docker,Dockerfile如何编写,如何通过Dockerfile安装jar包并外置yaml文件以及如何通过do...

CentOS7云主机部署Fail2ban阻断SSH暴力破解

关于Fail2banFail2ban可以监视你的系统日志,然后匹配日志的错误信息(正则式匹配)执行相应的屏蔽动作(一般情况下是调用防火墙屏蔽)例如:当有人在试探你的HTTP、SSH、SMTP、FTP密...

在CentOS7上用源码编译安装PostgreSQL

1、新建postgres用户#useraddpostgres&&passwdpostgres2、安装依赖包#yum-yinstallmakegccgcc-c++readline...

pure-ftpd 使用(ftp prompt命令)

pure-ftpd是一个免费的ftp软件,其他介绍就不多说了。我们直接开始主题安装centosyuminstallepel-releaseyuminstallpure-ftpd配置备份原配置...

取消回复欢迎 发表评论: