linux 显示硬链接

2018-09-20 15:46:55 farsight1 阅读数 706
  • Linux指令_管道命令

    1.Jeesite 4.0介绍与安装、 2.jeesite4.0 Eclipse 常用快捷键、 3.jeesite4.0文件结构与配置、 4.jeeiste4.0 内置模块与内置组件应用、 5.jeesite4.0代码生成器的应用、 6.jeesite4.0 Spring Boot快速入门、 7....

    19197课时 0分钟 158人学习 陈贺群
    免费试看

一、Linux硬链接简介

Linux下的文件是通过索引节点(Inode)来识别文件的,硬链接可以认为是一个指向文件索引节点的指针,系统并不为它重新分配inode。就像一个文件有多个文件名,每添加一个硬链接,文件的链接数就加1。

硬链接文件有两个限制

1)、不允许给目录创建硬链接;

2)、只有在同一文件系统中的文件之间才能创建硬链接。

二、Linux硬链接命令格式

Linux硬链接的命令格式如下所示:

ln [options] existingfile newfile

ln [options] existingfile-list directory

说明:

第一种格式是为”existingfile”创建硬链接,硬链接的文件名为”newfile”。

第二种格式是在”directory”目录中,为 ”existingfile-list”中包含的所有文件创建一个同名的硬链接。

常用选项[options]

-f 无论”newfile”存在与否,都创建链接。
-n 如果”newfile”已存在,就不创建链接。

三、Linux硬链接使用举例

Linux硬链接使用示例如下所示:

#ll -il
total 0
1069026 -rw-r--r-- 2 root root 0 Dec 25 21:30 file1
1069029 -rw-r--r-- 1 root root 0 Dec 25 21:29 file2
#ln file2 file2hard
#ll -il
total 0
1069026 -rw-r--r-- 2 root root 0 Dec 25 21:30 file1
1069029 -rw-r--r-- 2 root root 0 Dec 25 21:29 file2
1069029 -rw-r--r-- 2 root root 0 Dec 25 21:29 file2hard

说明:

在上面的例子中,创建链接前,file1 显示的链接数目为1;

创建链接后,

1)file1和file1hard的链接数目都变为2;

2)file1和file1hard在inode号是一样的;

3)file1和file1hard显示的文件大小也是一样;

file1和file1hard是同一个文件的两个名字,具有同样的索引节点号和文件属性。

建立文件file1的硬链接,就是为file1的文件索引节点在当前目录上建立一个新指针。

你可以删除其中任何一个,如rm file2 ,但每次只会删除一个指针,此时链接数减一,只有将所有指向文件内容的指针,也即链接数删为0时,内核才会真正把文件内容从磁盘上删除。

因此,硬链接可以算是为文件上了一个保险,用RM命令删除建立了硬链接的文件时,并不会真正的将文件删除掉,从而减小了误删的风险。

四、Linux硬链接的缺点

虽然硬链接十分实用,但却有如下两个缺点:

1)不可以在不同文件系统的文件间建立链接。

2)只有超级用户才可以为目录创建硬链接。

linux学习交流群:690327559

linux免费学习课程  :

linux基础
http://www.makeru.com.cn/course/details/2058?s=26056

C高级之linux
http://www.makeru.com.cn/course/details/2478?s=26056

linux多线程编程
http://www.makeru.com.cn/course/details/1937?s=26056

2017-11-14 21:33:00 weixin_34248118 阅读数 489
  • Linux指令_管道命令

    1.Jeesite 4.0介绍与安装、 2.jeesite4.0 Eclipse 常用快捷键、 3.jeesite4.0文件结构与配置、 4.jeeiste4.0 内置模块与内置组件应用、 5.jeesite4.0代码生成器的应用、 6.jeesite4.0 Spring Boot快速入门、 7....

    19197课时 0分钟 158人学习 陈贺群
    免费试看

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

软硬链接的区别:硬链接相当于一个文件两个名称,而软链接相当于创建指向源的快捷方式

注意:源文件是已经存在的文件,目标文件是要创建的文件

软链接实验:

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@openstack ~]# ll
总用量 22024
-rw-------.  1 root root     1311 9月  29 04:14 anaconda-ks.cfg
drwxr-xr-x. 18  501  501     4096 10月 30 21:29 Python-3.6.1
-rw-r--r--.  1 root root 22540566 3月  21 2017 Python-3.6.1.tgz
[root@openstack ~]# ln -s anaconda-ks.cfg anaconda-ks.cfg.ln 
[root@openstack ~]# ll
总用量 22024
-rw-------.  1 root root     1311 9月  29 04:14 anaconda-ks.cfg
lrwxrwxrwx.  1 root root       15 11月 16 23:13 anaconda-ks.cfg.ln -> anaconda-ks.cfg
drwxr-xr-x. 18  501  501     4096 10月 30 21:29 Python-3.6.1
-rw-r--r--.  1 root root 22540566 3月  21 2017 Python-3.6.1.tgz
[root@openstack ~]#

软链接可以通过ls -l命令看了软链接文件,标识是-> 表示目标指向源文件,跟ln定义的时候相反。

硬链接实验:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@openstack ~]# ll
总用量 22024
-rw-------.  1 root root     1311 9月  29 04:14 anaconda-ks.cfg
lrwxrwxrwx.  1 root root       15 11月 16 23:13 anaconda-ks.cfg.ln -> anaconda-ks.cfg
drwxr-xr-x. 18  501  501     4096 10月 30 21:29 Python-3.6.1
-rw-r--r--.  1 root root 22540566 3月  21 2017 Python-3.6.1.tgz
[root@openstack ~]# ln anaconda-ks.cfg anaconda-ks.cfg.hln
[root@openstack ~]# ls -l
总用量 22028
-rw-------.  2 root root     1311 9月  29 04:14 anaconda-ks.cfg
-rw-------.  2 root root     1311 9月  29 04:14 anaconda-ks.cfg.hln
lrwxrwxrwx.  1 root root       15 11月 16 23:13 anaconda-ks.cfg.ln -> anaconda-ks.cfg
drwxr-xr-x. 18  501  501     4096 10月 30 21:29 Python-3.6.1
-rw-r--r--.  1 root root 22540566 3月  21 2017 Python-3.6.1.tgz
[root@openstack ~]#

可以看到不能通过ls -l看到anaconda-ks.cfg的硬链接指向哪个文件,只能看到硬链接计数变成了2.

我们可以通过inode来找到anaconda-ks.cfg的另外一个硬链接文件。

1
2
3
4
5
6
7
8
9
10
11
root@openstack ~]# ls -il
总用量 22028
33582147 -rw-------.  2 root root     1311 9月  29 04:14 anaconda-ks.cfg
33582147 -rw-------.  2 root root     1311 9月  29 04:14 anaconda-ks.cfg.hln
33582167 lrwxrwxrwx.  1 root root       15 11月 16 23:13 anaconda-ks.cfg.ln -> anaconda-ks.cfg
50716171 drwxr-xr-x. 18  501  501     4096 10月 30 21:29 Python-3.6.1
34101767 -rw-r--r--.  1 root root 22540566 3月  21 2017 Python-3.6.1.tgz
[root@openstack ~]# find / -inum 33582147
/root/anaconda-ks.cfg
/root/anaconda-ks.cfg.hln
[root@openstack ~]#

注意:软链接能够跨越文件系统(分区),硬链接不可以。














本文转自lq201151CTO博客,原文链接:http://blog.51cto.com/liuqun/1982654 ,如需转载请自行联系原作者


2019-04-17 15:45:31 weixin_42255049 阅读数 984
  • Linux指令_管道命令

    1.Jeesite 4.0介绍与安装、 2.jeesite4.0 Eclipse 常用快捷键、 3.jeesite4.0文件结构与配置、 4.jeeiste4.0 内置模块与内置组件应用、 5.jeesite4.0代码生成器的应用、 6.jeesite4.0 Spring Boot快速入门、 7....

    19197课时 0分钟 158人学习 陈贺群
    免费试看

在linux中,链接文件分为硬链接和软链接文件两种,

其中硬链接通过ln source_file dist_file建立,

软链接通过ln -s source_file dist_file建立。

软硬链接的区别:硬链接相当于一个文件两个名称,而软链接相当于创建指向源的快捷方式

需要查看硬链接的所有文件的位置

第一步  ls -il 查看文件的inode

第二步 find / -inum  inodenum

例子

root@openstack ~]# ls -il
总用量 22028
33582147 -rw-------.  2 root root     1311 9月  29 04:14 anaconda-ks.cfg
33582147 -rw-------.  2 root root     1311 9月  29 04:14 anaconda-ks.cfg.hln
33582167 lrwxrwxrwx.  1 root root       15 11月 16 23:13 anaconda-ks.cfg.ln -> anaconda-ks.cfg
50716171 drwxr-xr-x. 18  501  501     4096 10月 30 21:29 Python-3.6.1
34101767 -rw-r--r--.  1 root root 22540566 3月  21 2017 Python-3.6.1.tgz
[root@openstack ~]# find / -inum 33582147
/root/anaconda-ks.cfg
/root/anaconda-ks.cfg.hln
[root@openstack ~]#
2016-04-28 17:11:28 huangfei711 阅读数 1052
  • Linux指令_管道命令

    1.Jeesite 4.0介绍与安装、 2.jeesite4.0 Eclipse 常用快捷键、 3.jeesite4.0文件结构与配置、 4.jeeiste4.0 内置模块与内置组件应用、 5.jeesite4.0代码生成器的应用、 6.jeesite4.0 Spring Boot快速入门、 7....

    19197课时 0分钟 158人学习 陈贺群
    免费试看

在Linux系统中,内核为每一个新创建的文件分配一个Inode(索引结点),每个文件都有一个惟一的inode号。文件属性保存在索引结点里,在访问文件时,索引结点被复制到内存,从而实现文件的快速访问。

Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情况下,ln命令产生硬链接。

一、硬链接
硬链接说白了是一个指针,指向文件索引节点,系统并不为它重新分配inode。

硬链接的建立:
这里写图片描述

硬链接的删除:
这里写图片描述

可以看出,在创建硬链接前,显示的链接数目为1,创建之后,链接数目变为2,test1.txt和test1hard在inode号是一样的,test1和test1hard显示的文件大小也是一样。可见进行了ln命令的操作结果:test1.txt和test1hard是同一个文件的两个名字,它们具有同样的索引节点号和文件属性,建立文件test1的硬链接,就是为test1的文件索引节点在当前目录上建立一个新指针。你可以删除其中任何一个 ,每次只会删除一个指针,链接数同时减一,当链接数减为0时,内核才会把文件内容从磁盘上删除。

二、软链接(符号链接)
软链接克服了硬链接的不足,没有任何文件系统的限制,任何用户可以创建指向目录的符号链接。因而现在更为广泛使用,它具有更大的灵活性,甚至可以跨越不同机器、不同网络对文件进行链接。

软链接的建立:
这里写图片描述

软链接的删除:
这里写图片描述
注意,删除软链接应该是 rm -rf linkname 而不是 rm -rf linkname/

可以看出:
(1)软链接原文件与链接文件拥有不同的inode号,表明他们是两个不同的文件;
(2)在文件属性上软链接明确写出了是链接文件,而硬链接没有写出来,因为在本质上硬链接文件和原文件是完全平等关系;
(3)链接数目是不一样的,软链接的链接数目不会增加;
(4)文件大小是不一样的,硬链接文件显示的大小是跟原文件是一样的;
(5)任何一个的时候 ,其他的文件都会做同步的修改 。软链接不直接使用i节点号作为文件指针,而是使用文件路径名作为指针。所以 删除连接文件对源文件无影响,但是删除源文件,连接文件就会找不到要指向的文件 。软链接有自己的inode,并在磁盘上有一小片空间存放路径名。

总结:软链接就是快捷方式,硬链接就是指向文件索引节点的指针。基于软链接的各种优势,更倾向于使用软链接。

2018-07-25 15:44:42 YL_max 阅读数 0
  • Linux指令_管道命令

    1.Jeesite 4.0介绍与安装、 2.jeesite4.0 Eclipse 常用快捷键、 3.jeesite4.0文件结构与配置、 4.jeeiste4.0 内置模块与内置组件应用、 5.jeesite4.0代码生成器的应用、 6.jeesite4.0 Spring Boot快速入门、 7....

    19197课时 0分钟 158人学习 陈贺群
    免费试看

硬链接:

       硬链接和符号链接比起来,硬链接是最初 Unix 创建链接的方式,而符号链接更加现代。在默认情况下,每个文件都有一个硬链接,这个硬链接给文件起名字。当我们创建一个硬链接以后,就为文件创建了一个额外的目录条目。硬链接有两个重要局限性:

1. 一个硬链接不能关联它所在文件系统之外的文件。这是说一个链接不能关联与链接本身不在同一个磁盘分区上的文件。
2. 一个硬链接不能关联一个目录。

一个硬链接和文件本身没有什么区别。不像符号链接,当你列出一个包含硬链接的目录内容时,你会看到没有特殊的链接指示说明。当一个硬链接被删除时,这个链接被删除,但是文件本身的内容仍然存在(这是说,它所占的磁盘空间不会被重新分配),直到所有关联这个文件的链接都删除掉。

符号链接:

       创建符号链接是为了克服硬链接的局限性。符号链接生效,是通过创建一个特殊类型的文件,这个文件包含一个关联文件或目录的文本指针。

       一个符号链接指向一个文件,而且这个符号链接本身与其它的符号链接几乎没有区别。例如,如果你往一个符号链接里面写入东西,那么相关联的文件也被写入。然而,当你删除一个符号链接时,只有这个链接被删除,而不是文件自身。如果先于符号链接删除文件,这个链接仍然存在,但是不指向任何东西。在这种情况下,这个链接被称为坏链接。在许多实现中,ls命令会以不同的颜色展示坏链接,比如说红色,来显示它们的存在。

测试:

如何确定硬链接和源文件是一样的?

注意到一件事,列表中,文件 fun 和 fun-hard 的第二个字段是 “4”,这个数字是文件 “fun”的硬链接数目。你要记得一个文件至少有一个硬链接,因为文件名就是由链接创建的。所以,我们怎样知道实际上 fun 和 fun-hard 是一样的文件呢?在这个例子里,ls 不是很有用。虽然我们能够看到 fun 和 fun-hard 文件大小一样(第五字段),但我们的列表没有提供可靠的信息来确定(这两个文件一样)。为了解决这个问题,我们更深入的研究一下。

当考虑到硬链接的时候,我们可以假设文件由两部分组成:包含文件内容的数据部分和持有文件名的名字部分,这将有助于我们理解这个概念。当我们创建文件硬链接的时候,实际上是为文件创建了额外的名字部分,并且这些名字都关系到相同的数据部分。这时系统会分配一连串的磁盘给所谓的索引节点,然后索引节点与文件名字部分相关联。因此每一个硬链接都关系到一个具体的包含文件内容的索引节点。
The ls command has a way to reveal this information. It is invoked with the “-i”option:
ls 命令有一种方法,来展示(文件索引节点)的信息。在命令中加上 “-i” 选项: