`

[转] linux文件链接

阅读更多

链接:一种在共享文件和访问它的用户的若干目录项之间建立联系的一种方法。

 

Linux中包括两种链接:硬链接(Hard Link)软链接(Soft Link),软链接又称为符号链接(Symbolic link)。

 

我们首先来了解一下几个名词

 

索引节点(inode)

 

要了解链接,我们首先得了解一个概念,叫索引节点(inode)。在Linux系统中,内核为每一个新创建的文件分配一个Inode(索引结点),每个文件都有一个惟一的inode号,我们可以将inode简单理解成一个指针,它永远指向本文件的具体存储位置。文件属性保存在索引结点里,在访问文件时,索引结点被复制到内存在,从而实现文件的快速访问。系统是通过索引节点(而不是文件名)来定位每一个文件。

 

硬链接(Hard Link)

 

硬链接说白了是一个指针,指向文件索引节点,系统并不为它重新分配inode。可以用:ln命令来建立硬链接。

 

引用

 

ln [options] existingfile newfile

 

ln [options] existingfile-list directory

 

 

 

用法:

 

第一种为”existingfile”创建硬链接,文件名为”newfile”

 

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

 

常用可选[options]-f 无论”newfile”存在与否,都创建链接。-n 如果”newfile”已存在,就不创建链接。

 

软链接(Soft Link)

 

软链接又叫符号链接,这个文件包含了另一个文件的路径名。可以是任意文件或目录,可以链接不同文件系统的文件。win下的快捷方式差不多

 

可以用:ln -s 命令来建立软链接。

 

引用

 

ln -s existingfile newfile

 

ln -s existingfile-list directory

 

 

 

下面我们用一个实例来说明硬链接和软链接。

 

现在目录下有两个文件,一个名为file1,一个名为file2

 

引用

 

$ ls –il

 

1052671 -rw-r--r-- 1 Leanx Leanx 0 2010-03-29 13:46 file1

 

1052670 -rw-r--r-- 1 Leanx Leanx 0 2007-03-29 13:46 file2

 

 

 

首先先做一个file1的硬链接。

 

引用

 

$ ln file1 file1hard

 

$ls –il

 

1052671 -rw-r--r-- 2 Leanx Leanx 0 2010-03-29 13:46 file1

 

1052670 -rw-r--r-- 1 Leanx Leanx 0 2010-03-29 13:46 file12

 

1052671 -rw-r--r-- 2 Leanx Leanx 0 2010-03-29 13:46 file1hard

 

 

 

这里我们注意在创建链接前,file1显示的链接数目为1,创建链接后

 

1.file1file1hard的链接数目都变为2

 

2.file1file1inode号是一样的,都是1052671

 

3.file1file1hard显示的文件大小也是一样,都是0B

 

可见进行了ln命令的操作结果:file1file1hard是同一个文件的两个名字,它们具有同样的索引节点号和文件属性,建立文件file1的硬链接,就是为 file1的文件索引节点在当前目录上建立一个新指针。你可以删除其中任何一个,如rm file1,每次只会删除一个指针,链接数同时减一,只有将所有指向文件内容的指针,也即链接数减为0时,内核才会把文件内容从磁盘上删除。

 

尽管硬链接节省空间,也是Linux系统整合文件系统的传统方式,但是存在一些不足之处:

 

1.不允许给目录创建硬链接。

 

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

 

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

 

引用

 

$ ln -s file2 file2soft

 

$ ls –il

 

总用量 0

 

1052671 -rw-r--r-- 2 Leanx Leanx 0 2010-03-29 13:34 file1

 

1052670 -rw-r--r-- 1 Leanx Leanx 0 2010-03-29 13:35 file2

 

1053313 lrwxrwxrwx 1 Leanx Leanx 5 2010-03-29 13:45 file2soft -> file2

 

1052671 -rw-r--r-- 2 Leanx Leanx 0 2010-03-29 13:34 file1hard

 

 

 

从上面链接后的结果可以看出来软链接与硬链接,区别不仅仅是在概念上,在实现上也是完全不同的。

 

区别:

 

 1.硬链接原文件/链接文件公用一个inode号,说明他们是同一个文件,而软链接原文件/链接文件拥有不同的inode号,表明他们是两个不同的文件;

 

 2.在文件属性上软链接明确写出了是链接文件,而硬链接没有写出来,因为在本质上硬链接文件和原文件是完全平等关系;

 

 3.链接数目是不一样的,软链接的链接数目不会增加;

 

 4.文件大小是不一样的,硬链接文件显示的大小是跟原文件是一样的。而这里软链接显示的大小与原文件就不同了,file2大小是0B,而file2soft5B

 

    总之,建立软链接就是建立了一个新文件。当访问链接文件时,系统就会发现他是个链接文件,它读取链接文件找到真正要访问的文件。

    当然软链接也有硬链接没有的缺点,因为链接文件包含有原文件的路径信息,所以当原文件从一个目录下移到其他目录中,再访问链接文件,系统就找不到了,而硬 链接就没有这个缺陷,你想怎么移就怎么移;还有它要系统分配额外的空间用于建立新的索引节点和保存原文件的路径。

 

From: http://blog.chinaunix.net/uid-23544029-id-311348.html

分享到:
评论

相关推荐

    Linux操作系统文件链接问题

    在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号。在Linux中多个文件名指向同一索引节点是存在的。一般这种连接就是硬连接。与硬连接相对应,Lnux系统中还存在另一种...

    linux 实验报告 文件系统与文件管理.pdf

    使用 ln 命令可以创建文件链接,然后使用 ls 命令来查看文件的信息。 8. 文件复制 使用 cp 命令可以复制文件,然后使用 ls 命令来查看文件的信息。 9. 文件删除 使用 rm 命令可以删除文件,然后使用 ls 命令来...

    linux文件系统结构分析

    Linux文件系统支持多种文件类型,包括普通文件(文本或二进制)、目录、符号链接、设备文件等。其中,设备文件分为字符设备(用于连续数据流,如键盘、串口)和块设备(用于随机存取,如硬盘、SSD)。 在Linux中,...

    Linux文件和目录操作命令

    ### Linux文件和目录操作命令详解 #### 一、概述 Linux作为一款强大的开源操作系统,广泛应用于服务器、桌面以及嵌入式设备等领域。对于初学者来说,掌握基本的文件和目录操作命令至关重要。本文将深入介绍Linux...

    Linux常用文件命令

    cat命令用于查看文件内容,man命令用于显示命令的用法,ln命令用于创建文件链接。使用ln命令可以创建硬链接和符号链接,硬链接用于创建文件的多个名称,符号链接用于创建文件的快捷方式。 五、文件查找 Linux提供...

    linux文件系统及文件操作命令

    在 Linux 中,文件可以分为普通文件、设备文件、链接文件和临时文件等类型。普通文件是最基本的文件类型,以 - 开头,例如文本文件、图片文件等。设备文件以 b 开头,例如 /dev/sda1,是指块设备文件。链接文件以 l ...

    linux文件系统概念解释

    ### Linux文件系统概念详解 #### 文件的逻辑结构与类型 在深入探讨Linux文件系统之前,首先需要理解文件的逻辑结构。文件的逻辑结构是用户在操作系统层面所能看到和操作的结构,它可以从用户的角度被分为两大类:*...

    Linux文件系统.pdf

    这篇学习资料详细介绍了Linux文件系统的一些关键概念和技术。 1. 文件系统类型 Linux支持多种文件系统类型,如EXT2、EXT3、EXT4、XFS、Btrfs、FAT、NTFS等。EXT4是目前最常用的一种,它在EXT2的基础上进行了优化,...

    java上传文件到linux服务器,操作linux服务器上文件,下载linux服务器文件,删除linux服务器文件

    例如,可以使用`rename()`方法重命名文件,`mv()`方法移动文件,`readlink()`获取符号链接的目标,`chattr()`改变文件属性等。 ```java sftp.rename(旧文件路径, 新文件路径); sftp.mv(源文件路径, 目标文件路径); ...

    Linux文件系统概念解释

    本篇将深入探讨Linux文件系统中的五种主要文件类型:普通文件、目录文件、连接文件、设备文件以及特殊文件(包括管道文件和套接字文件)。 1. **普通文件**: 普通文件是最常见的文件类型,包含文本、二进制数据、...

    linux动态链接库的开发实例

    在Linux系统中,动态链接库(Dynamic Linking Library,通常以`.so`为后缀)是一种重要的编程资源,它允许多个程序共享同一份代码,从而节省内存并方便代码维护。本教程将通过一个实例深入探讨Linux下C/C++语言如何...

    linux镜像文件链接

    有centos、RHEL以及RHEL服务器版。都是百度云链接,永久有效的。

    浅析Linux文件系统管理.pdf

    本文主要探讨了在Red Hat 9.0环境下Linux文件系统的管理,包括磁盘管理的各个方面。 1. Linux 文件系统类型 Linux 支持多种文件系统,如ext2、ext3和ext4,其中Red Hat 9.0默认使用ext3文件系统。ext3是一种日志...

    Linux文件IO操作

    ### Linux文件IO操作详解 #### 基本概念 Linux 文件 I/O 操作是学习 Linux 应用开发的基础,尤其对于初学者来说至关重要。本文旨在详细介绍 Linux 下的文件 I/O 操作及其相关概念。 #### 文件 在 Linux 系统中,...

    linux 文件系统 关系图

    inode是Linux文件系统的核心结构之一,通过inode可以实现硬链接、软链接等功能,同时inode也是文件系统高效管理文件的基础。 #### 目录项(Dentry) dentry是文件系统中的目录项缓存,它是为了提高对文件系统的...

    Linux下一个简单的文件系统实现

    在Linux操作系统中,文件系统是...通过这个项目,开发者不仅可以深入了解Linux文件系统的运作机制,还能提升C语言编程和系统级编程的能力,对于想要深入学习Linux内核和文件系统的人员来说,这是一个很好的实践机会。

    linux动态链接的基本知识

    在Linux环境下,动态链接是一种重要的程序连接方式,它允许程序在运行时加载所需的库文件。动态链接器(ld-linux.so.2)是实现这一功能的核心组件之一。动态链接器不仅能够帮助程序找到所需的共享库,还能确保这些库被...

    linux下文件操作

    Linux操作系统中的文件操作是非常核心的功能,它支持多种类型的文件,包括普通文件、目录、链接文件、设备文件以及套接字等。每种文件类型都有其特定的用途和操作方式。在Linux下进行文件操作时,通常会用到文件描述...

    Linux文件管理Linux的文件系统

    Linux文件管理系统是操作系统的核心组成部分,它负责管理和组织存储在硬盘驱动器上的数据。在Linux中,文件系统采用了虚拟文件系统技术(Virtual File System, VFS),这种技术允许Linux支持多种不同的文件系统类型...

Global site tag (gtag.js) - Google Analytics