8种机械键盘轴体对比

本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

导语:

在学习Linux文件系统的硬链接和符号连接时,我也产生了这个疑问。搜索找到几篇中文资料,总感觉像是隔靴搔痒,似懂非懂。改用英文搜索,找到了这篇文章,短短几句话,一针见血,深入浅出。于是翻译出来与大家分享。

提问:

教科书中说,Unix/Linux不允许硬链接指向目录,但软链接却可以。这是因为目录的硬链接会在文件系统中产生循环吗?还是因为如果我们给目录创建了硬链接后再删除原目录,会导致硬链接指向垃圾数据呢?若只是因为文件系统循环就禁用目录硬链接的话,那为什么又允许使用目录的软链接呢?

回答:

硬链接指向目录是行不通的。因为我们没有办法区分目录和它的硬链接,两者没有任何区别。

如果允许目录的硬链接,就有可能产生循环目录或空挂的子目录树,从而破坏文件系统的有向无环图(directed acyclic graph)结构,这将使fsck等用于遍历文件树的命令无法运行。

要理解这一点,我们首先来讨论一下inode。文件系统中的数据储存在磁盘的block中,每个inode管理着若干个block。我们可以认为这个inode就是文件。但inode无法记录文件名。这时我们需要link来帮忙了。

link是一个指向inode的指针,同时记录了文件名。目录也是一个inode,它的blocks保存的数据是若干link。

硬链接也指向inode。观察ls -l的输出,权限字段后面的那个数字的含义是指向该inode的链接数。大多数普通文件只有一个链接。而创建一个硬链接会使两个链接指向同一个inode。

% ls -l test

ls: test: No such file or directory

% touch test

% ls -l test

-rw-r--r-- 1 danny staff 0 Oct 13 17:58 test

% ln test test2

% ls -l test*

-rw-r--r-- 2 danny staff 0 Oct 13 17:58 test

-rw-r--r-- 2 danny staff 0 Oct 13 17:58 test2

% touch test3

% ls -l test*

-rw-r--r-- 2 danny staff 0 Oct 13 17:58 test

-rw-r--r-- 2 danny staff 0 Oct 13 17:58 test2

-rw-r--r-- 1 danny staff 0 Oct 13 17:59 test3

^

^ this is the link count

现在,我们可以清楚的发现,其实根本没有硬链接这个东西。所谓的硬链接其实就是一个link。在上面的例子中,我们根本没法分辨出test和test2哪个是原文件那个是硬链接(连时间戳都一样)。因为,这两个文件名指向同样的inode,指向同样的数据。

% ls -li test*

14445750 -rw-r--r-- 2 danny staff 0 Oct 13 17:58 test

14445750 -rw-r--r-- 2 danny staff 0 Oct 13 17:58 test2

14445892 -rw-r--r-- 1 danny staff 0 Oct 13 17:59 test3

参数-i用于显示文件的inode号。我们可以看到test和test2的inode号相同,而test3不同。

好了,如果我们为目录创建一个硬链接,那么位于文件系统中不同位置的两个目录就会指向同一内容。我们可以让子目录指向祖父目录,从而产生一个循环。

为什么不能有循环呢?因为遍历文件树时,我们没法知道我们是不是在兜圈子(除非一边遍历一边记录inode号)。比如,du命令会递归地遍历所有子目录来计算磁盘使用量。而循环会让du陷入麻烦,它不得不做大量的记录工作来完成原本简单的任务。

而符号链接(Symlinks)则是完全不同的一个物种了。它是一类特殊的文件类型,很多文件系统都支持符号链接。(win系统中的快捷方式就是符号链接————译者注)。注意,符号链接可以指向一个不存在的文件,因为它指向文件名而非inode。硬链接则不能指向空文件,只要硬链接存在就意味着文件存在。

那么为什么du能轻松处理目录的符号链接却不支持目录的硬链接呢?经过上面的讨论我们知道,目录的硬链接和普通目录是同一个东西。而符号链接则是一种特殊的文件类型,du能够检测出来并在遍历文件树时跳过它!

% ls -l

total 4

drwxr-xr-x 3 danny staff 102 Oct 13 18:14 test1/

lrwxr-xr-x 1 danny staff 5 Oct 13 18:13 test2@ -> test1

% du -ah

242M ./test1/bigfile

242M ./test1

4.0K ./test2

242M .

By Danny Dulai & G-Man

背单词英文含义directed acyclic graph有向无环图

symlink / symbol link符号链接/软链接

原文封面图: 天山 - 2015夏 - Sandii

linux不允许将硬链接指向目录,为什么 UNIX/Linux 不允许目录硬链 【翻译】相关推荐

  1. linux不允许将硬链接指向目录,linux 文件(目录)之软链接,硬链接 -

    前提必须清楚一点,当指向数据的文件个数为0 时,数据块就会被释放掉,硬链接相当于硬盘上一块数据的多个指针,而软链接相当于指向数据指针的指针.个人理解成下面的图例 左边的是硬链接,右边的是软链接,无论对 ...

  2. linux查看硬链接的对应文件,区分Linux硬链接与软链接

    在Linux中,连接文件有两种,一种类似于Windows的快捷方式,可以让你快速地链接到目标文件(或目录),这种称为软链接(soft link),也叫作符号链接(symbolic link):另一种则 ...

  3. linux系统如何配置ssh链接方式【以kali linux系统为例】【有一个坑,网上很多配置找不到PermitRootLogin选项】

    参考:https://blog.csdn.net/nzjdsds/article/details/82262228 [非常重要]在/etc/ssh/ssh_config中没有PermitRootLog ...

  4. Linux随笔2 - Linux的目录配置、文件元数据信息、符号链接与硬链接和常用文件和目录管理命令示例

    目录 1. Linux的目录配置与FHS(Filesystem Hierarchy Standard) 1.1 根目录(/)的意义与内容 1.1.1 FHS要求根目录中必须存在的目录 1.1.2 FH ...

  5. linux目录硬链接,linux查看硬链接对应的所有文件

    在linux中,链接文件分为硬链接和软链接文件两种,其中硬链接通过ln source_file dist_file建立,软链接通过ln -s source_file dist_file建立. 软硬链接 ...

  6. 【Linux】Linux下的硬链接与符号链接

    Linux的初学者常常混淆Linux中的硬链接(hard link)与符号链接(symbol link)的概念,分不清楚它们的区别.因此,本文将向读者全面介绍硬链接与符号链接,给予读者以全面的认识. ...

  7. linux硬链接与软链接

    详细文章链接:https://www.cnblogs.com/crazylqy/p/5821105.html (上面这个也是转载的!) 区别: 1.硬链接原文件/链接文件公用一个inode号,说明他们 ...

  8. 实例讲解Linux系统中硬链接与软链接的创建

    导读 Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link).默认情况下,ln命令产生硬链接.硬链接与软链接的区别从根本上要从Inode节点说 ...

  9. Linux 硬链接和软链接的区别

    硬链接和软链接的区别 Linux 与其他类 UNIX 系统一样并不区分文件与目录:目录是记录了其他文件名的文件.我们知道文件都有文件名与数据,这在 Linux 上被分成两个部分:用户数据 (user ...

最新文章

  1. Richard Feynman, 挑战者号, 软件工程,自顶而下
  2. Layui框架 中table解决日期格式问题
  3. comet4j开发指南
  4. Linux—系统文件和目录介绍
  5. C# Check is No number
  6. LeetCode 552. 学生出勤记录 II(动态规划)
  7. jpa 连接多个mysql 数据库_SpringBoot 连接多个数据库
  8. [Java] 蓝桥杯ALGO-27 算法训练 FBI树
  9. 锐捷校园网环境下使用虚拟机上网
  10. phpquery中文手册
  11. 外卖返利系统公众号外卖cps返利小程序淘宝客程序淘客侠客外卖CPS
  12. 内容创作者周刊:第4期
  13. 沈阳农业大学计算机专业排名,2019沈阳农业大学专业排名
  14. 计算机系统(六):应用层(上篇)
  15. EPLAN界面编辑背景颜色更改
  16. 使用bat脚本上传文件到Linux服务器
  17. x射线管的kV、mA、mAs
  18. Visual C++网络编程经典案例详解 第5章 网页浏览器 CHtmlView类 查看源文件
  19. html中添加水印效果
  20. Hadoop HA介绍

热门文章

  1. 计算机组成原理fpga实验指导书,计算机组成原理 FPGA实验指导书.doc
  2. 多个字段排序_SQL | 汇总分析、排序、运行顺序
  3. oracle 存储过程 发送WebServie 请求
  4. Qt Quick实现的疯狂算数游戏
  5. 思维认知-读mindhacks杂记
  6. Android 对话框用法
  7. DAN疼之后上些基础知识---自定义HttpModule和httpHandler
  8. Cygwin的中文支持(解决乱码)
  9. Python爬取百度搜索风云榜实时热点.
  10. Android10加入APEX目的