我们继续这个系列,来看一些你所不知道的微妙之处。

在本系列的第一篇文章中,我们认识了硬链接、软链接,知道在很多时候链接是非常有用的。链接看起来比较简单,但是也有一些不易察觉的奇怪的地方需要注意。这就是我们这篇文章中要讲的。例如,像一下我们在前一篇文章中创建的指向 libblah 的链接。请注意,我们是如何从目标文件夹中创建链接的。

cd /usr/local/lib

ln -s /usr/lib/libblah

这样是可以工作的,但是下面的这个例子却是不行的。

cd /usr/lib

ln -s libblah /usr/local/lib

也就是说,从原始文件夹内到目标文件夹之间的链接将不起作用。

出现这种情况的原因是 ln 会把它当作是你在 /usr/local/lib 中创建一个到 /usr/local/lib 的链接,并在 /usr/local/lib 中创建了从 libblah 到 libblah 的一个链接。这是因为所有链接文件获取的是文件的名称(`libblah),而不是文件的路径,最终的结果将会产生一个坏的链接。

然而,请看下面的这种情况。

cd /usr/lib

ln -s /usr/lib/libblah /usr/local/lib

是可以工作的。奇怪的事情又来了,不管你在文件系统的任何位置执行这个指令,它都可以好好的工作。使用绝对路径,也就是说,指定整个完整的路径,从根目录(/)开始到需要的文件或者是文件夹,是最好的实现方式。

其它需要注意的事情是,只要 /usr/lib 和 /usr/local/lib 在一个分区上,做一个如下的硬链接:

cd /usr/lib

ln libblah /usr/local/lib

也是可以工作的,因为硬链接不依赖于指向文件系统内的文件来工作。

如果硬链接不起作用,那么可能是你想跨分区之间建立一个硬链接。就比如说,你有分区 A 上有文件 fileA ,并且把这个分区挂载到 /path/to/partitionA/directory 目录,而你又想从 fileA 链接到分区 B 上 /path/to/partitionB/directory 目录,这样是行不通的。

ln /path/to/partitionA/directory/file /path/to/partitionB/directory

正如我们之前说的一样,硬链接是分区表中指向的是同一个分区的数据的条目,你不能把一个分区表的条目指向另一个分区上的数据,这种情况下,你只能选择创建一个软链接:

ln -s /path/to/partitionA/directory/file /path/to/partitionB/directory

另一个软链接能做到,而硬链接不能的是链接到一个目录。

ln -s /path/to/some/directory /path/to/some/other/directory

这将在 /path/to/some/other/directory 中创建 /path/to/some/directory 的链接,没有任何问题。

当你使用硬链接做同样的事情的时候,会提示你一个错误,说不允许那么做。而不允许这么做的原因量会导致无休止的递归:如果你在目录 A 中有一个目录 B,然后你在目录 B 中链接 A,就会出现同样的情况,在目录 A 中,目录 A 包含了目录 B,而在目录 B 中又包含了 A,然后又包含了 B,等等无穷无尽。

当然你可以在递归中使用软链接,但你为什么要那样做呢?

我应该使用硬链接还是软链接呢?

通常,你可以在任何地方使用软链接做任何事情。实际上,在有些情况下你只能使用软链接。话说回来,硬链接的效率要稍高一些:它们占用的磁盘空间更少,访问速度更快。在大多数的机器上,你可以忽略这一点点的差异,因为:在磁盘空间越来越大,访问速度越来越快的今天,空间和速度的差异可以忽略不计。不过,如果你是在一个有小存储和低功耗的处理器上使用嵌入式系统上使用 Linux, 则可能需要考虑使用硬链接。

另一个使用硬链接的原因是硬链接不容易损坏。假设你有一个软链接,而你意外的移动或者删除了它指向的文件,那么你的软链接将会损坏,并指向了一个不存在的东西。这种情况是不会发生在硬链接中的,因为硬链接直接指向的是磁盘上的数据。实际上,磁盘上的空间不会被标记为空闲,除非最后一个指向它的硬链接把它从文件系统中擦除掉。

软链接,在另一方面比硬链接可以做更多的事情,而且可以指向任何东西,可以是文件或目录。它也可以指向不在同一个分区上的文件和目录。仅这两个不同,我们就可以做出唯一的选择了。

下期

现在我们已经介绍了文件和目录以及操作它们的工具,你是否已经准备好转到这些工具,可以浏览目录层次结构,可以查找文件中的数据,也可以检查目录。这就是我们下一期中要做的事情。下期见。

你可以通过 Linux 基金会和 edX “Linux 简介”了解更多关于 Linux 的免费课程。

本文由 LCTT 原创编译,Linux中国 荣誉推出

linux技术理解,技术|理解 Linux 链接(二)相关推荐

  1. 2022新年重磅技术分享|深入理解Linux操作系统

    hi 大家好,这里是极客重生,愿2021所有的遗憾都是2022惊喜的铺垫,前路浩浩荡荡,万事尽可期待,祝大家新的一年付出都有收获! 这次分享的主题是: 如何掌握和精通一门技术 如何学习和攻破操作系统 ...

  2. 从根上理解高性能、高并发(二):深入操作系统,理解I/O与零拷贝技术

    1.系列文章引言 1.1 文章目的 作为即时通讯技术的开发者来说,高性能.高并发相关的技术概念早就了然与胸,什么线程池.零拷贝.多路复用.事件驱动.epoll等等名词信手拈来,又或许你对具有这些技术特 ...

  3. 【实践】多模态内容理解技术在腾讯搜索中的应用及实践.pdf(附下载链接)

    猜你喜欢 0.[免费下载]2021年11月热门报告盘点1.如何搭建一套个性化推荐系统?2.从零开始搭建创业公司后台技术栈3.全民K歌推荐系统算法.架构及后台实现4.微博推荐算法实践与机器学习平台演进5 ...

  4. 推荐时代的内容理解技术探索.pdf(附下载链接)

    今天给大家分享<推荐时代的内容理解技术初索.pdf>,文末附下载链接. 关注本公众号并回复"9019",可下载报告全文查看. 「 更多干货,更多收获 」 推荐系统教程之 ...

  5. 【生信】第一二三代测序技术原理的理解

    [生信]第一二三代测序技术原理的理解 本文部分图片来源网络或学术论文,文字部分来源网络与学术论文,仅供学习使用. 目录 [生信]第一二三代测序技术原理的理解 1.了解什么是DNA测序,什么是RNA测序 ...

  6. java metrics.counter_技术专栏 | 深入理解Metrics(二):Counters

    原标题:技术专栏 | 深入理解Metrics(二):Counters 本章会继续讲解Metrics的第二个工具:Counters. 1. Counters的使用 在account内部使用Counter ...

  7. linux内核调试技术 kprobe使用与实现

    Linux kprobes调试技术是内核开发者们专门为了便于跟踪内核函数执行状态所设计的一种轻量级内核调试技术.利用kprobes技术,内核开发人员可以在内核的绝大多数指定函数中动态的插入探测点来收集 ...

  8. 2020年关于Linux的知识技术合集(基础入门到高级进阶)

    前言 本文介绍下Linux如何从入门开始到高级进阶的学习路线. 整个体系专注于服务器后台开发,知识点包括C/C++,Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,Mon ...

  9. 亲爱的,我是一条Linux运维技术学习路径呀。

    根据我的经验,人在年轻时,最头疼的一件事就是决定自己这一生要做什么.在这方面,我倒没有什么具体的建议:干什么都可以,但最好不要写小说,这是和我抢饭碗.总而言之,干什么都是好的:但要干出个样子来,这才是 ...

最新文章

  1. 如何定义带有可选参数的函数python_Python如何定义有可选参数的元类
  2. Javascript 上课笔记
  3. NR 5G 世界通信发展史简述
  4. php 如何做ftp传输,php如何实现ftp上传
  5. WinForm实现简单的拖拽文件到出题的功能(C#)(3)
  6. mysql命令行的一些小技巧
  7. 前端动画 wow.js 效果
  8. -bash: unzip: 未找到命令_29 条运维工程师必会实用 Linux 命令
  9. Hls之http协议实现
  10. SpringBoot面试题一网打尽
  11. FormulaR1C1是EXCEL中单元格公式输入方法
  12. Android应用安全之第三方SDK安全
  13. 如何制作实时库存报表
  14. 苹果手机怎么连接蓝牙耳机_「科技犬」除了苹果AirPods,真无线蓝牙耳机到底怎么选?_蓝牙耳机...
  15. linux 查看mmc分区_Linux MMC介绍
  16. 一定要独立,一定要争气
  17. 【报错及解决】Variable w already exists, disallowed. Did you mean to set reuse=True in VarScope? Originally
  18. pyecharts-map世界地图国家中英文对照表
  19. IT行业分析之嵌入式应用
  20. poj 1789 kruscal水题

热门文章

  1. c语言课后答案第八章,C++第一至第八章课后习题答案
  2. 判断网页pdf还是html,html5 – 如何知道PDF.JS是否完成渲染?
  3. 深入理解计算机系统学后感,深入理解计算机系统(读书笔记)
  4. jar 工程我怎么在网页上url访问某一个方法_搜狗用这个骚技术,把百度逼上了绝路。。。...
  5. SparkSQL之External Data读写parquet
  6. java高并发(十二)并发容器J.U.C
  7. Java ThreadLocal 使用详解
  8. 老码农冒死揭开行业黑幕:如何编写无法维护的代码
  9. 细思恐极,插上U盘就开始执行Python代码的程序
  10. 未捕获typeerror: $形象。cropper不是函数_没有学不会的python--细说函数