热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Linux中的链接

介绍Li

综述

Linux中的链接的意思是创建一个文件,使它指向原有的文件。链接的方式有两种,一种称为硬链接,一种称为软连接(也叫符号链接)。两者有些差异,简单来说软链接是创建了一个新的文件,这个文件指向原来的文件;而硬链接跟源文件没有实质的差异,两者只是路径和名称不同而已。

链接使用ln命令来实现,它的说明如下:


用法:ln [选项]... [-T] 目标 链接名 (第一种格式)
 或:ln [选项]... 目标 (第二种格式)
 或:ln [选项]... 目标... 目录 (第三种格式)
 或:ln [选项]... -t 目录 目标... (第四种格式)
In the 1st form, create a link to TARGET with the name LINK_NAME.
In the 2nd form, create a link to TARGET in the current directory.
In the 3rd and 4th forms, create links to each TARGET in DIRECTORY.
Create hard links by default, symbolic links with --symbolic.
By default, each destination (name of new link) should not already exist.
When creating hard links, each TARGET must exist. Symbolic links
can hold arbitrary text; if later resolved, a relative link is
interpreted in relation to its parent directory.
必选参数对长短选项同时适用。
--backup[=CONTROL] 为每个已存在的目标文件创建备份文件
-b 类似--backup,但不接受任何参数
-d, -F, --directory 创建指向目录的硬链接(只适用于超级用户)
-f, --force 强行删除任何已存在的目标文件
-i, --interactive prompt whether to remove destinations
-L, --logical dereference TARGETs that are symbolic links
-n, --no-dereference treat LINK_NAME as a normal file if
it is a symbolic link to a directory
-P, --physical make hard links directly to symbolic links
-r, --relative create symbolic links relative to link location
-s, --symbolic make symbolic links instead of hard links
-S, --suffix=SUFFIX override the usual backup suffix
-t, --target-directory=DIRECTORY specify the DIRECTORY in which to create
the links
-T, --no-target-directory treat LINK_NAME as a normal file always
-v, --verbose print name of each linked file
--help 显示此帮助信息并退出
--version 显示版本信息并退出
The backup suffix is '~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.
The version control method may be selected via the --backup option or through
the VERSION_CONTROL environment variable. Here are the values:
none, off 不进行备份(即使使用了--backup 选项)
numbered, t 备份文件加上数字进行排序
existing, nil 若有数字的备份文件已经存在则使用数字,否则使用普通方式备份
simple, never 永远使用普通方式备份
Using -s ignores -L and -P. Otherwise, the last option specified controls
behavior when a TARGET is a symbolic link, defaulting to -P.

目标指的是需要被链接的源文件,链接名是新创建的用来链接的文件的名称,目录是需要创建链接文件的目录。软链接的创建需要增加参数-s,表示符号(symbolic)链接,硬链接的创建则不需要。

 

示例

首先创建一个源文件用来被链接,然后创建软硬链接并显示:

$ touch src_file
$ ln src_file hand_link
$ ln -s src_file soft_link
$ ls -ali
总用量 8
12072424 drwxr-xr-x 2 jw jw 4096 10月 17 11:18 .
11946004 drwxr-xr-x 6 jw jw 4096 10月 17 11:09 ..
12072425 -rw-r--r-- 2 jw jw 0 10月 17 11:18 hand_link
12072426 lrwxrwxrwx 1 jw jw 8 10月 17 11:18 soft_link -> src_file
12072425 -rw-r--r-- 2 jw jw 0 10月 17 11:18 src_file

这里有几点值得关注的:

首先是软连接在显示时有“->”这样的指向性表示,而硬链接是没有的。

再看显示的第一列,表示的是inode值,硬链接和源文件是一致的,而软连接却不同,这跟前面叫的软链接是新文件而硬链接跟源文件基本一致的说法对应起来了;这里还需要注意一点,硬链接跟源文件的inode一致,这也基本表示了硬链接和源文件必须是在同一个文件系统下的。

还有第二列的操作权限可以看到硬链接和源文件也是一致的,但是软连接却是全部用户都有读写执行权限,但是这并不表示所有用户都可以更改源文件,而只是可以操作软链接而已。

进一步说明软硬链接的差异,这里直接删除源文件,然后再读取软硬链接:

$ rm src_file
$ ll
总用量 8
drwxr-xr-x 2 jw jw 4096 10月 17 11:51 .
drwxr-xr-x 6 jw jw 4096 10月 17 11:09 ..
-rw-r--r-- 1 jw jw 0 10月 17 11:18 hand_link
lrwxrwxrwx 1 jw jw 8 10月 17 11:18 soft_link -> src_file
$ cat soft_link
cat: soft_link: 没有那个文件或目录
$ cat hard_link

这时候软链接已经无法访问,而硬链接还是可以访问的(因为是空的,所以没有打印,但是不会报错。此时如果看软链接显示的颜色,也可以看出已经发生了变化:

在Linux中目录也属于文件,所以理论上也是可以为其创建链接的,但是实际的测试中发现可以创建软链接但是无法创建硬链接,下面是一个例子:

$ mkdir src_dir
$ mkdir soft_dir
$ mkdir hard_dir
$ ls
hard_dir soft_dir src_dir
$ cd soft_dir/
$ ln -s ../src_dir/
$ ll
总用量 8
drwxr-xr-x 2 jw jw 4096 10月 17 12:48 .
drwxr-xr-x 5 jw jw 4096 10月 17 12:48 ..
lrwxrwxrwx 1 jw jw 11 10月 17 12:48 src_dir -> ../src_dir/
$ cd ..
$ cd hard_dir/
$ ln ../src_dir/
ln: ../src_dir/: 不允许将硬链接指向目录

可以看到创建目录的硬链接报错了。关于这一点,在《UNIX环境高级编程》中有说明:

从这里的说明来看超级用户可以创建目录的硬链接,但是需要文件系统本身的支持,不过目前来看ext4是不支持的。

 


推荐阅读
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 本文介绍了使用哈夫曼树实现文件压缩和解压的方法。首先对数据结构课程设计中的代码进行了分析,包括使用时间调用、常量定义和统计文件中各个字符时相关的结构体。然后讨论了哈夫曼树的实现原理和算法。最后介绍了文件压缩和解压的具体步骤,包括字符统计、构建哈夫曼树、生成编码表、编码和解码过程。通过实例演示了文件压缩和解压的效果。本文的内容对于理解哈夫曼树的实现原理和应用具有一定的参考价值。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
author-avatar
冒泡鱼的快乐2011
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有