ln - Create Links, 创建链接
ln命令用来创建硬链接或符号链接,是link的缩写。
这个命令在Linux命令行里使用,也称为shell。
Shell使用一个终端窗口来打开和操作。
主要有两种使用方式:
创建硬链接:(只能是文件)
ln [options] file link
创建符号链接或软链接:(可以是文件或文件夹)
ln -s [options] item link
注意:
ln命令不能创建新的文件夹结构,所以创建的链接所在的路径要存在。
默认情况下,ln命令执行成功后不会有输出,返回值为0.
如果省略第二个参数或第二个参数为只是一个 '.' ,则会在当前目录下生成一个与原文件相同名称的链接。
Hard Links 硬链接
硬链接是Unix创建链接的原始方式,与符号链接相比,后者更为先进。默认情况下,每个文件都有一个单一的硬链接,就是文件名本身。
当我们创建一个硬链接时,我们为一个文件创建一个额外的目录条目。硬链接有两个重要的限制:
1. 硬链接不能引用它自己的文件系统以外的文件。这意味着一个链接不能引用与链接本身不在同一磁盘分区上的文件。
2.一个硬链接不能引用一个目录。
硬链接只能用命令行来创建。它们被更广泛地整合到操作系统的内存管理和正在使用的文件系统中。硬链接是原始文件的一个镜像副本,它有自己的目录条目(directory entry)。几个硬链接可以指向同一个文件。事实上,Linux在技术上或操作上并不区分原始文件和后来产生的硬链接,这意味着所有的目录条目都被视为相同的,并且彼此独立工作。
硬链接与文件本身是没有区别的。与符号链接不同,当我们在一个包含硬链接的目录里运行ls,我们不会看到链接的特殊指示。当一个硬链接被删除时,该链接被删除,但文件本身的内容继续存在(也就是说,它的空间没有被重新分配),直到所有与该文件的硬链接被删除。
每个硬链接都指向一个唯一的inode号码,原始文件和硬链接一样,也指向相同的inode号码。Linux中文件系统使用inode来唯一识别分配给文件的存储空间,所以硬链接和原始文件只是一种记录(entry), 里面包含了指向文件内容的inode号码。所以说最开始创建的原文件和硬链接是没有区别的,除了创建方式和先后不同。每创建一个硬链接,这个inode的引用计数就会加1。反过来,每删除一个硬链接,这个inode的引用计数就会减1。当引用计数变为0时,这个文件内容才会被真正删除。如果至少一个硬链接或原始文件的记录引用了这个原始文件,或者原始文件被移到另一个目录中,对文件使用没有影响。使用哪条硬链接或原文件的记录来访问和操作这个文件,结果都是一样的,文件的各种属性包括内容,对所有硬链接都是一样的。
你可以把硬链接看作是一个现有文件的额外名称。硬链接是将两个或更多的文件名与同一个inode联系起来。你可以为一个文件创建一个或多个硬链接。
inode是一种数据结构,是一个文件的唯一描述,包含了文件的元信息(group membership, owner, access rights)和文件内容保存的存储地址。
让我们看看一个具体的例子。假设有一个视频文件,只能在 "我的视频 "目录下访问。在创建一个硬链接后,它也可以从另一个目录中检索,例如 "我的视频备份"。如果原始文件从 "我的视频 "中被删除,它仍然可以通过 "我的视频备份 "中的文件的硬链接路径完美访问。这是硬链接的一个优点--文件存储管理中的额外条目不会占用任何额外的存储空间。它只是作为访问的另一种选择(通过文件路径),而不是文件的第二个物理拷贝。
Symbolic Links 符号链接
符号链接是为了克服硬链接的限制而创建的。符号链接的工作方式是创建一种特殊类型的文件,其中包含一个指向所引用文件或目录的间接的文本指针。在这方面,它们的操作方式与Windows的快捷方式基本相同,当然,它们比Windows的功能要早很多年。
符号链接所指向的文件和符号链接本身在很大程度上是没有区别的。例如,如果我们向符号链接写东西,被引用的文件就会被写进去。然而,当我们删除一个符号链接时,只有该链接被删除,而不是文件本身。如果文件被删除或被移动,符号链接将继续存在,但将什么都不指向。在这种情况下,该链接被认为是被破坏了。在许多实现中,ls命令将以一种区别性的颜色显示不存在的链接,如红色,以区别显示。
软链接可以在Linux终端和Linux文件管理器的图形用户界面中创建。你可以通过文件图标上的箭头符号发现Linux中的软链接。
有关命令选项
-i, --interactive
创建链接时,如果文件已存在,提示是否覆盖。
否则文件已存在情况下会提示文件已存在,创建链接失败。
-f, --force
创建链接时,如果文件已存在,直接覆盖不提示。
-r, --relative
创建符号链接时,使用源文件的路径作为相对路径。此选项硬链接不适用。
ln命令使用的原文件不是绝对路径时,可以使用此参数,使用相对路径。
-t, --target-directory=DIRECTORY
指定链接生成的目录。软链接和硬链接都有效。
-v , --verbose
显示每个链接操作的文件名。这个选项一般是通用的选项,各个命令都有。
使用举例
命令
说明
$ ln -s 1.txt 2.txt
创建1.txt的软链接 - 2.txt。
$ ln 1.txt 2.txt
创建1.txt的硬链接 - 2.txt。 
$ ln -s ./dir1/1.txt /dir2/2.txt
$ readlink /dir2/2.txt
./dir1/1.txt
在不同路径下创建软链接, 使用的路径为ln命令指定的路径。
$ ln -s -r ./dir1/1.txt /dir2/2.txt
$ readlink /dir2/2.txt
../1.txt
在不同路径下创建软链接, 使用的路径为相对原文件的路径。
$ ln -s -r -t ./dir2/ *.txt
$ ln -s -r --target-directory=./dir2
在dir2目录中创建当前目录下txt类型文件的软链接。
$ ln -t ./dir2/ *.txt
在dir2目录中创建当前目录下txt类型文件的硬链接。
$ ln -r -i 1.txt  /dir/2.txt
如果链接文件已存在,询问是否覆盖。如果已存在但没用-i参数, 则直接报错。
$ ln -r -f 1.txt  /dir/2.txt
如果链接文件已存在,直接覆盖。
删除链接
使用rm或unlink命令来删除链接文件,包括软链接和硬链接。
当前路径下有两个文件,1.txt是硬链接,2.txt是软链接。
"ls -l"或"ll"命令显示的信息,第一列是权限信息,第二列是硬链接数。
所以1.txt的硬链接数是3就表示对同一个inode,有3个引用。
第一列的第一个字母是文件特殊说明符,如果是文件夹就是d, 如果是软链接就是l,如果是文件夹的软链接,也是l, 如果是普通文件,就是'-'。
$ ll
total 8
drwxrwxr-x 2 vm vm 4096 4月   4 12:18 ./
drwxrwxr-x 4 vm vm 4096 4月   4 11:59 ../
-rw-rw-r-- 3 vm vm    0 4月   4 11:56 1.txt
lrwxrwxrwx 1 vm vm    8 4月   4 12:18 2.txt -> ../1.txt

当我们使用unlink或rm命令删除链接后,结果为:
$ unlink 2.txt
$ unlink 1.txt
$ ll
total 8
drwxrwxr-x 2 vm vm 4096 4月   4 12:19 ./
drwxrwxr-x 4 vm vm 4096 4月   4 11:59 ../

两个链接文件都被删除了,硬链接的文件的引用数会减1.
应该如何使用硬链接和软链接?
对普通用户来所,软链接通常足够用了。它们可以用来跨文件系统和分区以及在各种硬盘上链接文件和目录。然而,当涉及到对引用对象进行更改(如移动和删除)时,软链接并不像硬链接那样灵活。
硬链接通常用来链接文件,而不是目录或文件夹。而且由于节点号只能在分区内管理,硬链接只能连接单个分区内的文件。然而,现代Linux系统通常包含位于不同硬盘和分区的各种文件系统。因此,如果你要使用硬链接,你应该了解你的系统,知道分区和格式化的基本知识。
硬链接的优势在涉及到备份的时候。你可以获得对原始文件的替代访问,同时节省空间并提高数据的安全性。
由于硬链接直接代表原始文件,对它进行解读时不需要额外的操作。这意味着它们可以被更快地处理,对应用程序来说是完全透明的。你也可以使用硬链接来解决特殊问题。例如,如果一个程序使用的是一个过期库,如果想更新这个库,而不改变库的名字,可以删掉这个库,再创建一个同名的硬链接,指向最新版本的库。
参考:
Linux ln command: Creating links in Linux [+example] - IONOS
https://linuxize.com/post/how-to-create-symbolic-links-in-linux-using-the-ln-command/

Shell - ln相关推荐

  1. linux shell ln命令 建立文件符号链接

    语法 ln [option]... source dist 选项 -b:删除.覆盖目标文件前先备份: -d:创建硬链接目录:(注意:由于系统可能会失败限制,甚至root用户) -f:删除现有的目标文件 ...

  2. linux中 ln -s 软链接

    前言 略 创建软链接 ln -s [源路径] [目标路径] 比如: shell> ln -s test_1.txt test_2.txt shell> ll -rw-r--r-- 1 ro ...

  3. shell mysql版本_mysql版本5.5.x升级到5.6.x步骤分享

    大概步骤是: 把配置文件添加:skip-grant-tables参数,把basedir升级成新版本,启动mysql,执行命令:mysql_upgrade升级一下字典信息,然后flush privile ...

  4. linux下超强命令(shell语句)组合

    记性很差劲,经常在系统,网络之间转,没有专搞系统.时间一长,所以难免有些命令或组合式语句忘记了,今天把它们集合到一起,以后跑博客上找就是了,陆续更新中... 服务器双网卡,双IP,第二个网卡路由设置格 ...

  5. python调用adb shell命令_如何在python脚本里面连续执行adb shell后面的各种命令

    如何在python脚本里面连续执行adb shell后面的各种命令 adb shell "cd /data/local && mkdir tmp" adb shel ...

  6. Linux shell脚本1

    什么是shell shell是一个命令解释器,提供用户和机器之间的交互 支持特定语法,比如逻辑判断.循环 每个用户都可以有自己特定的shell 还有其他zsh.ksh等 CentOS7 默认的shel ...

  7. android 常用adb 和 adb shell 命令 获取root权限

    android 常用adb 和 adb shell 命令 ADB常用命令:   1. 查看设备 adb  devices 这个命令是查看当前连接的设备, 连接到计算机的android设备或者模拟器将会 ...

  8. shell编程基础笔记

    第一部分shell编程基础 1shell简介 什么是shell 存取权限和安全 shell简单脚本 shell特性 1.1什么是shell shell是核心程序kernel之外的指令解析器,是一个程 ...

  9. Tomcat(一):背景知识和安装tomcat

    1. 基础背景知识 1.1 java和jdk概念 无论是何种程序,要能在计算机上运行,必须能转换为二进制的机器语言才能和硬件进行交互,在机器语言的上层是汇编语言,再上层是C/C++这样较底层的语言,由 ...

最新文章

  1. php7+的php-fpm参数配置,注意事项
  2. 作为一个新人,怎样学习嵌入式Linux?
  3. 慎重选型:PG还是MySQL?Uber的案例不能作为参考!
  4. 删除表格数据后自动刷新_Calliope: 表格数据的自动故事生成系统
  5. 【行业报告】基于社交图谱关系的反欺诈产品应用——青云
  6. JS时间戳格式化日期时间
  7. Filter_细节_过滤器拦截路径配置
  8. ASP.NET Core分布式项目实战(oauth2 + oidc 实现 client部分)--学习笔记
  9. 【渝粤题库】陕西师范大学202801 中国古代文学(五) 作业
  10. optimized mysql_MySQL解释计划中“Select tables optimized away”的含义
  11. linux 正则查找email_Linux--正则表达式--详解
  12. 算法导论-VLSI芯片测试问题
  13. 学习 nltk —— TF-IDF
  14. git使用笔记(二)分支与合并
  15. 旋转图像 leetcode
  16. JAVA音乐社交平台设计计算机毕业设计Mybatis+系统+数据库+调试部署
  17. oracle 索引 状态 unusable,usable ,disable,enable
  18. 移动硬盘如何恢复数据
  19. perl q qq qr qw qx 区别与使用方法
  20. 5 JMeter断言-Jmeter响应中出现乱码时

热门文章

  1. 自适应LASSO的Oracle性质,最新变量选择_惩罚似然_自适应Lasso_SCAD_Oracle性质论文
  2. 抖音爬虫挑战一------------模拟器安装
  3. 护卫神主机大师php,护卫神主机大师下载
  4. 现代图论Ⅰ(图论概念)
  5. 惨!程序员锁死服务器跑路,公司解散600万打水漂
  6. 江苏省二级c语言考试电子书,江苏省二级c语言上机考试例题集1-20
  7. 超详细的vscode 配置FTP,并本地编辑
  8. el-select 可选择/可输入,自定义搜索方法
  9. SEO人员必须要掌握的三个-SEO基础知识
  10. 拜占庭共识算法PBFT:Practical Byzantine Fault Tolerance