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

 


推荐阅读
  • 本文详细介绍了在 CentOS 7 系统中配置 fstab 文件以实现开机自动挂载 NFS 共享目录的方法,并解决了常见的配置失败问题。 ... [详细]
  • 本文介绍如何使用 Python 的 DOM 和 SAX 方法解析 XML 文件,并通过示例展示了如何动态创建数据库表和处理大量数据的实时插入。 ... [详细]
  • php更新数据库字段的函数是,php更新数据库字段的函数是 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • Android 构建基础流程详解
    Android 构建基础流程详解 ... [详细]
  • Spring – Bean Life Cycle
    Spring – Bean Life Cycle ... [详细]
  • Ihavetwomethodsofgeneratingmdistinctrandomnumbersintherange[0..n-1]我有两种方法在范围[0.n-1]中生 ... [详细]
  • 本文介绍如何在 Android 中自定义加载对话框 CustomProgressDialog,包括自定义 View 类和 XML 布局文件的详细步骤。 ... [详细]
  • 字符串学习时间:1.5W(“W”周,下同)知识点checkliststrlen()函数的返回值是什么类型的?字 ... [详细]
  • 本视频教程将带你快速了解 Android 开发的基础知识,并详细讲解如何在 Android 应用中使用 SQLite 数据库进行数据存储和管理。 ... [详细]
  • 本文对比了杜甫《喜晴》的两种英文翻译版本:a. Pleased with Sunny Weather 和 b. Rejoicing in Clearing Weather。a 版由 alexcwlin 翻译并经 Adam Lam 编辑,b 版则由哈佛大学的宇文所安教授 (Prof. Stephen Owen) 翻译。 ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 本文详细介绍了MySQL数据库的基础语法与核心操作,涵盖从基础概念到具体应用的多个方面。首先,文章从基础知识入手,逐步深入到创建和修改数据表的操作。接着,详细讲解了如何进行数据的插入、更新与删除。在查询部分,不仅介绍了DISTINCT和LIMIT的使用方法,还探讨了排序、过滤和通配符的应用。此外,文章还涵盖了计算字段以及多种函数的使用,包括文本处理、日期和时间处理及数值处理等。通过这些内容,读者可以全面掌握MySQL数据库的核心操作技巧。 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
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社区 版权所有