热门标签 | 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是不支持的。

 


推荐阅读
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了brain的意思、读音、翻译、用法、发音、词组、同反义词等内容,以及脑新东方在线英语词典的相关信息。还包括了brain的词汇搭配、形容词和名词的用法,以及与brain相关的短语和词组。此外,还介绍了与brain相关的医学术语和智囊团等相关内容。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
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社区 版权所有