热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

RHCE系列之文件管理----硬链接和软链接

Linux文件系统最重要的特点之一是它的文件链接。链接是对文件的引用,这样你可以让文件在文件系统中多处被看到。在Linux中,链接可以如

       Linux 文件系统最重要的特点之一是它的文件链接。

        链接是对文件的引用,这样你可以让文件在文件系统中多处被看到。

        在 Linux 中,链接可以如同原始文件一样来对待。链接可以与普通的文件一样被执行、编辑和访问。对系统中的其它应用程序而言,链接就是它所对应的原始文件。当你通过链接对文件进行编辑时,你编辑的实际上就是原始文件。切记,链接并不是文件的副本。

         在linux系统中,链接可分为两类:一类被称为硬链接(Hard Link),另一类被称为软链接或符号链接(Symbolic Link)。


硬链接

       硬链接(Hard Link)引用的是文件在文件系统中的物理索引(inode节点)。由于不同的文件系统之间各自独立,因此硬链接只能引用同一文件系统中的文件。

       当我们在移动或删除原始文件时,硬链接文件不会被破坏,因为它所引用的是文件的物理数据而不是文件在文件结构中的位置。当我们对硬链接文件进行读写的操作的时候,实际操作的是原始文件。硬链接的文件不需要用户有访问原始文件的权限,也不会显示原始文件的位置,这样有助于文件的安全。如果你删除的文件有相应的硬链接,那么这个文件依然会保留下来,直到所有对它的引用都被删除。


软链接

       软链接(Symbolic Link),又称符号链接,它是一类特殊的文件, 其包含有一条以绝对路径或者相对路径的形式指向其它文件或者目录的引用。

       当我们在移动或删除原始文件时,软链接文件会被破坏(失效),但是不会消失。当我们对软链接文件进行读写的操作的时候,实际操作的是原始文件。

       符号链接文件仅包含有一个文本字符串,其被操作系统解释为一条指向另一个文件或者目录的路径。它是一个独立文件,其存在并不依赖于目标文件。如果删除一个符号链接,它指向的目标文件不受影响。


       在linux中,系统的ln命令为我们提供了创建软/硬链接的功能。

[root@lh rhce]# touch file_name   #创建范例文件file_name[root@lh rhce]# ln file_name  hard_link_file_name   #创建硬链接,前面跟原始文件名,后面跟硬链接文件的名
[root@lh rhce]# ln -s file_name Symbolic_link_file_name   #创建软链接,前面跟原始文件名,后面跟软链接文件的名
[root@lh rhce]# ls -il   #查看创建信息,i查看inode节点号,l文件信息长格式输出
total 0
286759 -rw-r--r-- 2 root root 0 Jun 15 22:48 file_name
286759 -rw-r--r-- 2 root root 0 Jun 15 22:48 hard_link_file_name
286760 lrwxrwxrwx 1 root root 9 Jun 15 22:49 Symbolic_link_file_name -> file_name

       通过观察file_name的软链接文件和硬链接文件,我们发现原始文件的inode节点号和硬链接的inode节点号一模一样,而软链接则是新的inode节点号。

        下面呢,我为大家总结下硬链接和软链接的区别

1)创建命令ln,默认不带参数创建的是硬链接,带-s参数创建的是软链接

2)硬链接文件与原始文件的 inode 节点号相同,而软链接文件的 inode 节点号与原始文件不同

3)ln命令不能对目录创建硬链接,但可以创建软链接,并且对目录的软链接在生产环境中经常用到。

4)删除软链接文件,对原始文件及硬链接文件无任何影响

5)删除硬链接文件,对原始文件及软链接无任何影响

6)删除软链接文件的原始文件,对硬链接文件无任何影响,但是会导致其软链接失效(红底白字闪烁状)

7)正常情况下,只有同时删除原始文件及其硬链接文件,整个文件才会被真正的删除

8)很多硬件设备中的快照功能,使用的就是类似硬链接的原理

9)软链接可以跨文件系统,硬链接不可以跨文件系统


介绍了,软/硬链接以及它们的区别,下面介绍下各自在生产环境中的使用案例:

1)软链接的生产使用案例

       当我们编译apache、nginx或者php之类的软件时,编译的路径中默认都带着版本号,比如/apps/apache-2.4.6(用来区分版本,因此路径比较长)。但是我们在访问目录时却又希望简便,并且为了方便后期软件的升级以及实现其它扩展功能,此时我们就可以通过为原始目录建立一个软链接,来满足需求。比如:

ln Cs /apps/apache2.4.6 /apps/apache

       以上的例子,就是一个简单而又常用的例子。这样子,我们在一些脚本中指定apache路径时,只需要指定软链接文件的地址就可以了,这样子我们下次升级apache软件的时候,就不用一个一个修改众多脚本中的apache路径了。

       再看一个例子,假设我服务器上跑着lnmp的网站架构,并且针对php,我安装了2个版本的,一个是php-5.2.17,一个是php-5.4.24。针对这种情况,我如果想实现快速的php切换,此时我就可以通过软链接的形式来实现。每次,只需要通过修改软链接的指向,就能轻松切换php的版本了。


2)硬链接的生产使用案例

       硬链接用的多的就是在数据的备份这方面,比如硬件存储的快照功能、为备份数据创建多个硬链接放置删除数据等等



以上就是链接相关的知识了,下面补充一个朋友咨询的问题:

如何查看一个文件硬链接的分布,或者说假设一个文件有5个硬链接,我怎么知道这5个硬链接文件到底在文件系统的哪个目录下?

解决方案:

       Linux系统中的find命令,可以帮助我们查找文件的硬链接到底分布在系统中的哪些位置。

[root@lh rhce]# ls -il   #查看file_name文件的inode节点号total 0286759 -rw-r--r-- 5 root root 0 Jun 15 22:48 file_name[root@lh rhce]# find / -inum 286759 2> /dev/null   #通过find提供的-inum选项通过文件的inode节点号去查看同一个inode的文件分布情况/mnt/hard_link_file_name_1/root/rhce/file_name/etc/hard_link_file_name_2/tmp/hard_link_file_name/media/hard_link_file_name_3


本文出自 “Not Only Linux” 博客,请务必保留此出处http://nolinux.blog.51cto.com/4824967/1426749


推荐阅读
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 优化联通光猫DNS服务器设置
    本文详细介绍了如何为联通光猫配置DNS服务器地址,以提高网络解析效率和访问体验。通过智能线路解析功能,域名解析可以根据访问者的IP来源和类型进行差异化处理,从而实现更优的网络性能。 ... [详细]
  • 本文详细分析了JSP(JavaServer Pages)技术的主要优点和缺点,帮助开发者更好地理解其适用场景及潜在挑战。JSP作为一种服务器端技术,广泛应用于Web开发中。 ... [详细]
  • 本文探讨了Hive中内部表和外部表的区别及其在HDFS上的路径映射,详细解释了两者的创建、加载及删除操作,并提供了查看表详细信息的方法。通过对比这两种表类型,帮助读者理解如何更好地管理和保护数据。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 如何配置Unturned服务器及其消息设置
    本文详细介绍了Unturned服务器的配置方法和消息设置技巧,帮助用户了解并优化服务器管理。同时,提供了关于云服务资源操作记录、远程登录设置以及文件传输的相关补充信息。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 在现代网络环境中,两台计算机之间的文件传输需求日益增长。传统的FTP和SSH方式虽然有效,但其配置复杂、步骤繁琐,难以满足快速且安全的传输需求。本文将介绍一种基于Go语言开发的新一代文件传输工具——Croc,它不仅简化了操作流程,还提供了强大的加密和跨平台支持。 ... [详细]
  • 网络运维工程师负责确保企业IT基础设施的稳定运行,保障业务连续性和数据安全。他们需要具备多种技能,包括搭建和维护网络环境、监控系统性能、处理突发事件等。本文将探讨网络运维工程师的职业前景及其平均薪酬水平。 ... [详细]
  • 题库来源:安全生产模拟考试一点通公众号小程序G3锅炉水处理报名考试是安全生产模拟考试一点通生成的,G3锅炉水处理证模拟考试题库是根据G3锅炉水处理最新 ... [详细]
  • Linux 基础命令详解
    本文介绍了在 Linux 系统中常见的命令及其用法。当用户登录系统后,默认提示符会显示为 [root@localhost ~]# 或 [user@localhost ~]$,其中 # 表示当前用户为 root,$ 表示普通用户。我们将深入探讨一些常用的 Linux 命令,帮助初学者更好地理解和使用这些工具。 ... [详细]
  • 解决微信电脑版无法刷朋友圈问题:使用安卓远程投屏方案
    在工作期间想要浏览微信和朋友圈却不太方便?虽然微信电脑版目前不支持直接刷朋友圈,但通过远程投屏技术,可以轻松实现在电脑上操作安卓设备的功能。 ... [详细]
  • MySQL缓存机制深度解析
    本文详细探讨了MySQL的缓存机制,包括主从复制、读写分离以及缓存同步策略等内容。通过理解这些概念和技术,读者可以更好地优化数据库性能。 ... [详细]
author-avatar
款款迷恋_420
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有