Linux中的链接 ln

本文目录

  • 1 i节点
  • 2 硬链接
  • 3 软链接

i节点

在Linux中创建文件时,Linux会做两件事情,第一是在设备上保留一块空间存储数据,第二是创建一个i节点(i-node)存放该文件的基本信息。

i节点存放文件所需的全部文件系统信息,它通常包含:

  • 以字节为单位的文件长度
  • 包含该文件的设备名称
  • 拥有者的用户标识及id
  • 所属组的用户标识及id
  • 文件权限
  • 上一次修改时间
  • 上一次访问时间
  • i节点的上一次修改时间
  • 指向该文件的链接数
  • 文件的类型
  • 分配给该文件的块数
  • ……

用户不必了解i节点的内容,但是也可以很方便的查看,使用stat FILENAME查看你文件的i节点的信息:

$ stat name
  File: 'name'
  Size: 4096            Blocks: 8          IO Block: 4096   directory
Device: fd01h/64769d    Inode: 1709368     Links: 3
Access: (0775/drwxrwxr-x)  Uid: ( 1001/     tom)   Gid: ( 1001/     tom)
Access: 2018-06-05 16:47:54.643771585 +0800
Modify: 2018-05-12 10:37:53.792094043 +0800
Change: 2018-06-05 16:48:35.487772167 +0800
 Birth: -

文件系统将i节点存放在一个大表中,这个表叫i节点表

目录其实是一张表,这个表的每一项都记录着目录下的一个文件的文件名和i节点号。当访问文件时,虽然用户输入的是文件名,但是系统会通过文件名后面记录的i节点号找到i节点,再通过i节点中的内容找到文件的存储位置,读出文件。

使用ls -i FILENAME即可查看文件的i节点号。下面的例子首先创建了文件now.txt,其内容是Hello, World!,之后查看了其i节点号和i节点的内容,最后查看了文件内容:

$ echo "Hello, World!" > now.txt
$ ls -i now.txt
1709370 now.txt
$ stat now.txt
  File: 'now.txt'
  Size: 14              Blocks: 8          IO Block: 4096   regular file
Device: fd01h/64769d    Inode: 1709370     Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1001/     tom)   Gid: ( 1001/     tom)
Access: 2018-06-05 17:06:49.791782004 +0800
Modify: 2018-06-05 17:06:49.791782004 +0800
Change: 2018-06-05 17:06:49.791782004 +0800
 Birth: -
$ cat now.txt
Hello, World!

文件名、i节点和文件内容的关系示意图如下:

硬链接

可以使用ln命令创建一个硬链接(或者叫链接),它的特点是会有多个目录项指向同一个i节点。从用户的角度来看,用户的文件具有多个文件名,这些文件名都指向同一个文件。

通过下面的命令创建新链接:

ln TARGET LINK_NAME 

其中TARGET是一个已经存在的普通文件,而LINK_NAME是新链接的名称。

例如,下面的命令为now.txt创建一个在homework目录下的名为newNow.txt的链接:

$ ln now.txt homework/newNow.txt
$ ls -i now.txt homework/newNow.txt
1709370 homework/newNow.txt  1709370 now.txt

查看二者的i节点号:

$ ls -i now.txt homework/newNow.txt
1709370 homework/newNow.txt  1709370 now.txt

可以看到,它们确实指向了同一个i节点。

软链接

软链接也叫做符号链接,这种链接的特点是会新建一个全新的文件,在该文件中记录目标文件的路径。

使用ln命令的-s选项即可创建软链接,下面为now.txt创建一个名为newSNow.txt的软链接:

$ ln -s now.txt newSNow.txt

查看其i节点号,二者并不相同:

$ ls -il now.txt newSNow.txt
1710866 lrwxrwxrwx 1 tom tom  7 Jun  5 17:35 newSNow.txt -> now.txt
1709370 -rw-rw-r-- 2 tom tom 14 Jun  5 17:06 now.txt

newSNow.txt -> now.txt表示newSNow.txt是指向now.txt的软链接。

原文发布于微信公众号 - mwangblog(mwangblog)

原文发表时间:2018-06-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Spark学习技巧

高性能:MYSQL异步客户端

实时处理领域,当需要使用外部存储数据染色的时候,需要慎重对待,不能让与外部系统之间的交互延迟对流的整个进度取决定性的影响。

56320
来自专栏Python爬虫与算法进阶

强大的异步爬虫 with aiohttp

看到现在网络上大多讲的都是requests、scrapy,却没有说到爬虫中的神器:aiohttp

23220
来自专栏软件开发

NodeJS+Express+MongoDB

一、MongoDB MongoDB是开源,高性能的NoSQL数据库;支持索引、集群、复制和故障转移、各种语言的驱动程序丰富;高伸缩性; MongoDB 是一个基...

98090
来自专栏小狼的世界

Linux下文件时间的一些测试

通过URL进行访问 url/tools/time.php, 再查看 time 的时间

11040
来自专栏pythonlove

FTP使用MariaDB完成虚拟用户认证

文件传输协议(英文:File Transfer Protocol,縮寫:FTP)是用於在網絡上進行文件傳輸的一套標準協議。它属于网络传输协议的应用层。FTP是一...

13140
来自专栏曾大稳的博客

zygote篇

参考连接:http://gityuan.com/2016/02/13/android-zygote/

11230
来自专栏BeJavaGod

搜索服务Solr集群搭建 使用ZooKeeper作为代理层

上篇文章搭建了zookeeper集群 那好,今天就可以搭建solr搜服服务的集群了,这个和redis 集群不同,是需要zk管理的,作为一个代理层 安装四个tom...

38730
来自专栏运维

Nginx1.10.2稳定版本tcp四层负载安装配置过程略解

nginx1.10.2(2016.10.18)是最新稳定版,适合线上运行,最新开发版为1.11.8(2016.12.27)

16610
来自专栏晓晨的专栏

ASP.NET Core + Docker +Jenkins 实现持续集成

26020
来自专栏Laoqi's Linux运维专列

关于安装jumpserver跳板机报错的问题解决

1.3K60

扫码关注云+社区

领取腾讯云代金券