Linux上建立和更改硬连接和符号连接(软链接)
对于Linux上的硬连接和软链接而言,使用cp命令,不管覆盖其中的那个文件(源文件,软链接文件,硬连接文件),其它文件的内容都会同步修改。
css
点击(此处)折叠或打开java
- [oracle@edsir4p1- ~]$ ll
- [oracle@edsir4p1- ~]$ touch a.txt
- [oracle@edsir4p1- ~]$ ln -s a.txt b.txt
- [oracle@edsir4p1- ~]$ ll
- -rw-r--r-- 1 oracle oinstall 0 Dec 4 12:32 a.txt
- lrwxrwxrwx 1 oracle oinstall 5 Dec 4 12:32 b.txt -> a.txt
- [oracle@edsir4p1- ~]$ ln a.txt c.txt
- [oracle@edsir4p1- ~]$ ll
- -rw-r--r-- 2 oracle oinstall 0 Dec 4 12:32 a.txt
- lrwxrwxrwx 1 oracle oinstall 5 Dec 4 12:32 b.txt -> a.txt
- -rw-r--r-- 2 oracle oinstall 0 Dec 4 12:32 c.txt
- [oracle@edsir4p1- ~]$ echo lhr > a.txt
- [oracle@edsir4p1- ~]$ more a.txt
- lhr
- [oracle@edsir4p1- ~]$
- [oracle@edsir4p1- ~]$ more a.txt
- lhr
- [oracle@edsir4p1- ~]$ more b.txt
- lhr
- [oracle@edsir4p1- ~]$ more c.txt
- lhr
- [oracle@edsir4p1- ~]$ echo lihuarong > b.txt
- [oracle@edsir4p1- ~]$ more a.txt
- lihuarong
- [oracle@edsir4p1- ~]$ more b.txt
- lihuarong
- [oracle@edsir4p1- ~]$ more c.txt
- lihuarong
- [oracle@edsir4p1- ~]$ echo best > d.txt
- [oracle@edsir4p1- ~]$
- [oracle@edsir4p1- ~]$
- [oracle@edsir4p1- ~]$ cp d.txt b.txt
- [oracle@edsir4p1- ~]$ ll *.txt
- -rw-r--r-- 2 oracle oinstall 5 Dec 4 12:36 a.txt
- lrwxrwxrwx 1 oracle oinstall 5 Dec 4 12:32 b.txt -> a.txt
- -rw-r--r-- 2 oracle oinstall 5 Dec 4 12:36 c.txt
- -rw-r--r-- 1 oracle oinstall 5 Dec 4 12:36 d.txt
- [oracle@edsir4p1- ~]$ more a.txt
- best
- [oracle@edsir4p1- ~]$ more b.txt
- best
- [oracle@edsir4p1- ~]$ more c.txt
- best
- [oracle@edsir4p1- ~]$ more d.txt
- best
- [oracle@edsir4p1- ~]$ ls -i a.txt
- 46236787 a.txt
- [oracle@edsir4p1- ~]$ ls -li *.txt
- 46236787 -rw-r--r-- 2 oracle oinstall 5 Dec 4 12:36 a.txt
- 46236797 lrwxrwxrwx 1 oracle oinstall 5 Dec 4 12:32 b.txt -> a.txt
- 46236787 -rw-r--r-- 2 oracle oinstall 5 Dec 4 12:36 c.txt
- 46236798 -rw-r--r-- 1 oracle oinstall 5 Dec 4 12:36 d.txt
- [oracle@edsir4p1- ~]$ echo xxxoooo > e.txt
- [oracle@edsir4p1- ~]$ ls -li *.txt
- 46236787 -rw-r--r-- 2 oracle oinstall 5 Dec 4 12:36 a.txt
- 46236797 lrwxrwxrwx 1 oracle oinstall 5 Dec 4 12:32 b.txt -> a.txt
- 46236787 -rw-r--r-- 2 oracle oinstall 5 Dec 4 12:36 c.txt
- 46236798 -rw-r--r-- 1 oracle oinstall 5 Dec 4 12:36 d.txt
- 46236799 -rw-r--r-- 1 oracle oinstall 8 Dec 4 12:57 e.txt
- [oracle@edsir4p1- ~]$ cp b.txt b.txt_bk
- [oracle@edsir4p1- ~]$
- [oracle@edsir4p1- ~]$
- [oracle@edsir4p1- ~]$ cp e.txt b.txt
- [oracle@edsir4p1- ~]$
- [oracle@edsir4p1- ~]$ more b.txt
- xxxoooo
- [oracle@edsir4p1- ~]$ more a.txt
- xxxoooo
- [oracle@edsir4p1- ~]$ more c.txt
- xxxoooo
- [oracle@edsir4p1- ~]$ more b.txt_bk
- best
- [oracle@edsir4p1- ~]$ cp b.txt_bk a.txt
- [oracle@edsir4p1- ~]$ more a.txt
- best
- [oracle@edsir4p1- ~]$ more b.txt
- best
- [oracle@edsir4p1- ~]$ more c.txt
- best
- [oracle@edsir4p1- ~]$ ll *.txt
- -rw-r--r-- 2 oracle oinstall 5 Dec 4 12:58 a.txt
- lrwxrwxrwx 1 oracle oinstall 5 Dec 4 12:32 b.txt -> a.txt
- -rw-r--r-- 2 oracle oinstall 5 Dec 4 12:58 c.txt
- -rw-r--r-- 1 oracle oinstall 5 Dec 4 12:36 d.txt
- -rw-r--r-- 1 oracle oinstall 8 Dec 4 12:57 e.txt
- [oracle@edsir4p1- ~]$ rm -rf b.txt
- [oracle@edsir4p1- ~]$ ll *.txt
- -rw-r--r-- 2 oracle oinstall 5 Dec 4 12:58 a.txt
- -rw-r--r-- 2 oracle oinstall 5 Dec 4 12:58 c.txt
- -rw-r--r-- 1 oracle oinstall 5 Dec 4 12:36 d.txt
- -rw-r--r-- 1 oracle oinstall 8 Dec 4 12:57 e.txt
- [oracle@edsir4p1- ~]$
概述
在本篇中,学习建立和管理硬连接和符号连接。学习:node
- 建立硬或软连接
- 识别连接并知道它们的类型
- 理解复制与连接文件之间的区别
- 使用连接执行系统管理任务
连接简介
在存储设备上,文件或目录包含在一些数据块中。有关某个文件的信息包含在一个 inode 中,它记录了全部者、最后访问该文件的时间、文件的大小、它是不是目录,以及谁能够读取或写入它等信息。inode 编号也称为文件序列号 ,该编号在特定文件系统内是惟一的。一个 目录条目 包含一个文件或目录的名称,以及用来存储该文件或目录的信息的 inode 的指针。python
建立连接
硬连接 是指向 inode 的目录条目,而 软连接 或 符号连接 是指向提供另外一个目录条目的名称的 inode 的目录条目。存储第二个名称的准确机制可能依赖于文件系统和名称的长度。符号连接也称为symlink 。linux
您能够只为文件建立硬连接,而不为目录建立硬连接。一个例外是一个包含该目录和它的父目录(. 和 ..)的目录中的特殊目录条目,它们是维护子目录数量的硬连接。由于硬连接指向 inode,并且 inode 仅在特定的文件系统内是惟一的,因此硬连接不能跨文件系统使用。若是一个文件有多个硬连接,那么只在指向该 inode 的最后一个连接被删除,并且连接数量变为 0 时,才会删除该文件。c++
软连接或 symlink 仅按名称指向另外一个文件或目录,而不是按 inode。软连接能够跨越文件系统边界进行使用。删除软连接不会删除目标文件或目录,删除目标文件或目录也不会自动删除任何软连接。shell
首先让咱们看看如何建立硬和软连接。在本教程后面,咱们将介绍识别和使用咱们在这里建立的连接的方式。windows
硬连接
使用 ln 命令建立现有文件的额外的硬连接(但不能是目录,即便系统将 . 和 .. as 设置为硬连接)。centos
清单 1 展现了如何建立一个包含两个文件和一个子目录的目录,其中包含 file1 的两个硬连接,一个位于同一个目录中,另外一个位于子目录中。咱们向 file1 添加一个词,而后向 file3 添加另外一个词,并在子目录中显示该连接的内容,以代表全部连接确实都指向相同的数据。bash
清单 1. 建立硬连接
[plain] view plain copy
- [ian@atticf22 ~]$ mkdir -p lpi104-6/subdir
- [ian@atticf22 ~]$ touch lpi104-6/file1
- [ian@atticf22 ~]$ touch lpi104-6/file2
- [ian@atticf22 ~]$ ln lpi104-6/file1 lpi104-6/file3
- [ian@atticf22 ~]$ ln lpi104-6/file1 lpi104-6/subdir/file3sub
- [ian@atticf22 ~]$ echo "something" > lpi104-6/file1
- [ian@atticf22 ~]$ echo "else" >> lpi104-6/file3
- [ian@atticf22 ~]$ cat lpi104-6/subdir/file3sub
- something
- else
若是尝试建立跨文件系统或针对目录的硬连接,则会得到错误。清单 2 显示个人主目录和 research 目录在不一样的文件系统上,并且跨这些文件系统建立硬连接的尝试失败了,与建立 lpi104-6 目录的硬连接的尝试同样。
清单 2. 硬连接建立失败
[plain] view plain copy
- [ian@atticf22 ~]$ df . research
- Filesystem 1K-blocks Used Available Use% Mounted on
- /dev/sda5 71168700 31642752 35887712 47% /
- /dev/sdb3 60326992 30677592 26578276 54% /home/ian/research
- [ian@atticf22 ~]$ mkdir -p research/lpi104-6/
- [ian@atticf22 ~]$ ln lpi104-6/file1 research/lpi104-6/file3
- ln: failed to create hard link ‘ research/lpi104-6/file3 ’ =>
- ‘ lpi104-6/file1 ’ : Invalid cross-device link
- [ian@atticf22 ~]$ ln lpi104-6 lpidir104-6
- ln: ‘ lpi104-6 ’ : hard link not allowed for directory
软连接
使用 ln 命令和 -s 选项来建立软连接。软连接使用文件或目录名称,这些名称多是相对或绝对的。若是使用相对名称,您可能但愿当前工做目录是您建立连接的目录。不然,您建立的连接将是文件系统中的另外一个位置相对的连接。
清单 3 展现了为咱们刚建立的 file1 建立软连接的两种方式,以及如何建立软连接,而不是建立在 清单 2中失败的两个硬连接。
清单 3. 建立软连接
[plain] view plain copy
- [ian@atticf22 ~]$ # Create symlink using absolute paths
- [ian@atticf22 ~]$ ln -s ~/lpi104-6/file1 ~/lpi104-6/file4
- [ian@atticf22 ~]$ # Create symlink using relative paths
- [ian@atticf22 ~]$ cd lpi104-6/
- [ian@atticf22 lpi104-6]$ ln -s file1 file5
- [ian@atticf22 lpi104-6]$ cd ..
- [ian@atticf22 ~]$ # Create symlink across file systems
- [ian@atticf22 ~]$ mkdir -p ~ian/research/lpi104-6
- [ian@atticf22 ~]$ ln -s ~/lpi104-6/file1 ~ian/research/lpi104-6/file4
- [ian@atticf22 ~]$ # Create symlink for directory
- [ian@atticf22 ~]$ ln -s lpi104-6 lpidir104-6
与以前同样,您可使用任何连接或目标文件名来引用该文件或目录。清单 4 显示了一些例子。
清单 4. 使用软连接
[plain] view plain copy
- [ian@atticf22 ~]$ echo "another line" >> ~ian/research/lpi104-6/file
- [ian@atticf22 ~]$ # cat a symlink
- [ian@atticf22 ~]$ cat lpi104-6/file5
- something
- else
- [ian@atticf22 ~]$ # cat a hard link
- [ian@atticf22 ~]$ cat lpi104-6/file1
- something
- else
- [ian@atticf22 ~]$ # display directory contents using symlink
- [ian@atticf22 ~]$ ls lpidir104-6
- file1 file2 file3 file4 file5 subdir
在建立连接时,让咱们在工做目录 不是咱们想要存放连接的目录时使用相对路径建立一个连接。下一节将介绍如何实现此目的。
清单 5. 建立不良的软连接
[plain] view plain copy
- [ian@atticf22 ~]$ ln -s lpi104-6/file1 lpi104-6/file6
识别连接
在上一节中,您了解了如何建立连接,但不知道如何区分您建立的连接。如今让咱们讨论一下这个主题。
查找信息
在许多系统上,ls 命令等同于 ls --color=auto ,它以不一样颜色打印不一样类型的文件系统对象。若是使用此选项,可能使用蓝绿色文原本显示 symlink,如 图 1中所示。
图 1. 使用 ls 的 --colors 选项来识别连接
在旧配置上,可能使用深蓝色背景来显示硬连接。这些颜色可以使用 dircolors 程序来配置。若是要自定义您的终端外观,您可能但愿更改ls 的一些输出的颜色。清单 6显示了一种在 Fedora 22 系统上得到硬连接的蓝色背景的方式,而 图 2 则显示告终果。使用手册页进一步理解该示例。
清单 6. 使用 dircolors 为硬连接设置一种蓝色背景
[plain] view plain copy
- [ian@atticf22 ~]$ # Save a copy of dircolors defaults
- [ian@atticf22 ~]$ dircolors -p > dircolors-defaults
- [ian@atticf22 ~]$ grep MULTI dircolors-defaults
- MULTIHARDLINK 00 # regular file with more than one link
- [ian@atticf22 ~]$ # Change MULTIHARDLINK to blue background
- [ian@atticf22 ~]$ sed -e'/MULTI/s/00/00;44/' dircolors-defaults > dircolors-new
- [ian@atticf22 ~]$ grep MULTI dircolors-new
- MULTIHARDLINK 00;44 # regular file with more than one link
- [ian@atticf22 ~]$ # Set the new colors for the current terminal session
- [ian@atticf22 ~]$ eval $(dircolors dircolors-new )
图 2. 使用蓝色背景来标识硬连接
对于可以区分颜色的视力正常的人而言,颜色可能很方便,但它们对其余人没多大用处,对 shell 脚本或程序确定也没多大用处。没有颜色,就须要更多的信息,好比使用ls -l 经过一个长清单所提供的信息。在 清单 7中,咱们为第一个示例显式禁用了颜色输出,但您也能够像咱们对另外两个示例所作的同样显式调用/bin/ls 命令。
清单 7. 识别连接
[plain] view plain copy
- [ian@atticf22 ~]$ ls --color=none -lR lpi104-6
- lpi104-6:
- total 12
- -rw-rw-r--. 3 ian ian 15 Aug 9 14:19 file1
- -rw-rw-r--. 1 ian ian 0 Aug 9 14:19 file2
- -rw-rw-r--. 3 ian ian 15 Aug 9 14:19 file3
- lrwxrwxrwx. 1 ian ian 24 Aug 9 14:26 file4 -> /home/ian/lpi104-6/file1
- lrwxrwxrwx. 1 ian ian 5 Aug 9 14:26 file5 -> file1
- lrwxrwxrwx. 1 ian ian 14 Aug 9 14:34 file6 -> lpi104-6/file1
- drwxrwxr-x. 2 ian ian 4096 Aug 9 14:19 subdir
-
- lpi104-6/subdir:
- total 4
- -rw-rw-r--. 3 ian ian 15 Aug 9 14:19 file3sub
- [ian@atticf22 ~]$ /bin/ls -l ~ian/research/lpi104-6/file4
- lrwxrwxrwx. 1 ian ian 24 Aug 9 14:27 /home/ian/research/lpi104-6/file4 -> /home/ian/lpi104-6/file1
- [ian@atticf22 ~]$ /bin/ls -l lpidir104-6
- lrwxrwxrwx. 1 ian ian 8 Aug 9 14:27 lpidir104-6 -> lpi104-6
输出的第二列是一个连接计数,显示了此文件的硬连接数,因此咱们知道 file一、file3 和 file3sub 都拥有多个指向它们表示的对象的硬连接。咱们仍没有足够的信息来知道它们都表示同一个对象。若是您删除一个连接数大于 1 的文件,inode 中的连接数会减 1,但该文件只在连接数变为 0 时才会删除。同一个文件的其余全部硬连接将显示一个如今减去了 1 的连接数。
在输出的第一列中,您会看到第一个字符是表示符号连接的 “l”(L 的小写形式)。您还会看到在 -> 字符后显示了连接的目标。例如,file4 -> /home/ian/lpi104-6/file1。另外一个提示是,该大小是连接目标的名称中的字符数。请注意,对于符号连接,目录清单中的连接数没有更新。删除该连接不会影响目标文件。Symlink 不会阻止文件被删除。若是目标文件被移动或删除,那么 symlink 将被破坏。出于这个缘由,许多系统在目录清单中使用了颜色,一般使用淡蓝色表示正常连接,使用红色表示被破坏的连接。
您可使用 ls 命令的 -i 选项来显示文件和目录条目的 inode 数量。清单 8同时给出了咱们的 lpi104-6 目录的短和长输出。
清单 8. 显示 inode 信息
[plain] view plain copy
- [ian@atticf22 ~]$ ls -i lpi104-6
- 1988884 file1 1988884 file3 1988892 file5 1988605 subdir
- 1988886 file2 1988885 file4 1988891 file6
- [ian@atticf22 ~]$ ls -il lpi104-6
- total 12
- 1988884 -rw-rw-r--. 3 ian ian 15 Aug 9 14:19 file1
- 1988886 -rw-rw-r--. 1 ian ian 0 Aug 9 14:19 file2
- 1988884 -rw-rw-r--. 3 ian ian 15 Aug 9 14:19 file3
- 1988885 lrwxrwxrwx. 1 ian ian 24 Aug 9 14:26 file4 -> /home/ian/lpi104-6/file1
- 1988892 lrwxrwxrwx. 1 ian ian 5 Aug 9 14:26 file5 -> file1
- 1988891 lrwxrwxrwx. 1 ian ian 14 Aug 9 14:34 file6 -> lpi104-6/file1
- 1988605 drwxrwxr-x. 2 ian ian 4096 Aug 9 14:19 subdir
您还可使用 find 命令,使用 -type l 查找表达式来搜索符号连接,如 清单 9中所示。
清单 9. 使用 find 查找 symlink
[plain] view plain copy
- [ian@atticf22 ~]$ find lpi104-6 research/lpi104-6 -type l
- lpi104-6/file4
- lpi104-6/file6
- lpi104-6/file5
- research/lpi104-6/file4
破坏的 symlink
在 清单 5 中,咱们声明要建立一个不良的软连接。这是破坏的 symlink 的一个示例。由于硬连接始终指向一个表示文件的 inode,因此它们始终有效。可是,symlink 可能出于许多缘由而遭到破坏,包括:
- 在建立连接时,连接的原始文件或目标不存在(就像 清单 5 中同样)。
- 连接的目标被删除或重命名。
- 目标的路径中的某个元素被删除或重命名。
全部这些条件都不会抛出错误,因此您须要仔细考虑您在建立 symlink 时可能发生了什么状况。具体地讲,对于绝对或相对路径的选择,可能受到您但愿连接的对象在连接生存期中发生什么的影响。
若是您使用颜色输出,破坏的 symlink 可能在黑色背景上显示为红色文本,就像 图 1 中的 file6 的状况同样。不然,您须要使用 ls 的 -H 或 -L 选项来取消引用该连接,并提供有关目标的信息。-H 选项在命令行上取消引用连接,-L 选项取消引用显示中包含的附加连接。清单 10演示了来自这两个选项的输出中的区别。
清单 10. 使用 ls -H 和 ls -L 取消引用连接
[plain] view plain copy
- [ian@atticf22 ~]$ /bin/ls -lH lpidir104-6
- total 12
- -rw-rw-r--. 3 ian ian 15 Aug 9 14:19 file1
- -rw-rw-r--. 1 ian ian 0 Aug 9 14:19 file2
- -rw-rw-r--. 3 ian ian 15 Aug 9 14:19 file3
- lrwxrwxrwx. 1 ian ian 24 Aug 9 14:26 file4 -> /home/ian/lpi104-6/file1
- lrwxrwxrwx. 1 ian ian 5 Aug 9 14:26 file5 -> file1
- lrwxrwxrwx. 1 ian ian 14 Aug 9 14:34 file6 -> lpi104-6/file1
- drwxrwxr-x. 2 ian ian 4096 Aug 9 14:19 subdir
- [ian@atticf22 ~]$ /bin/ls -lL lpidir104-6
- /bin/ls: cannot access lpidir104-6/file6: No such file or directory
- total 20
- -rw-rw-r--. 3 ian ian 15 Aug 9 14:19 file1
- -rw-rw-r--. 1 ian ian 0 Aug 9 14:19 file2
- -rw-rw-r--. 3 ian ian 15 Aug 9 14:19 file3
- -rw-rw-r--. 3 ian ian 15 Aug 9 14:19 file4
- -rw-rw-r--. 3 ian ian 15 Aug 9 14:19 file5
- l?????????? ? ? ? ? ? file6
- drwxrwxr-x. 2 ian ian 4096 Aug 9 14:19 subdir
请注意,错误消息代表 file6 不存在,另请注意针对它的包含全部 “?” 字符的输出,它们一样代表该文件不存在。
关于破坏的符号连接,还要说明最后一点。读取该文件的尝试将失败,由于它不存在。可是,若是您拥有目标文件的合适权限,写入它的尝试将有效,如 清单 11中所示。请注意,咱们须要在写入该文件以前建立 lpi104-6/lpi104-6。
清单 11. 读取和写入一个破坏的 symlink
[plain] view plain copy
- [ian@atticf22 ~]$ cat lpi104-6/file6
- cat: lpi104-6/file6: No such file or directory
- [ian@atticf22 ~]$ echo "Testing file6" > lpi104-6/file6
- bash: lpi104-6/file6: No such file or directory
- [ian@atticf22 ~]$ mkdir lpi104-6/lpi104-6
- [ian@atticf22 ~]$ cat lpi104-6/file6
- cat: lpi104-6/file6: No such file or directory
- [ian@atticf22 ~]$ echo "Testing file6" > lpi104-6/file6
- [ian@atticf22 ~]$ cat lpi104-6/file6
- Testing file6
- [ian@atticf22 ~]$ ls lpi104-6/lpi104-6
- file1
- [ian@atticf22 ~]$ ls -l lpi104-6/file6
- lrwxrwxrwx. 1 ian ian 14 Aug 9 14:34 lpi104-6/file6 -> lpi104-6/file1
谁连接到我?
要肯定哪些文件是一个特定 inode 的硬连接,可使用 find 命令和 -samefile 选项及一个文件名,或者-inum 选项及一个 inode 编号,如 清单 12 中所示。
清单 12. 查找同一个文件的硬连接
[plain] view plain copy
- [ian@atticf22 ~]$ find lpi104-6 -samefile lpi104-6/file1
- lpi104-6/file1
- lpi104-6/file3
- lpi104-6/subdir/file3sub
- [ian@atticf22 ~]$ ls -i lpi104-6/file1
- 1988884 lpi104-6/file1
- [ian@atticf22 ~]$ find lpi104-6 -inum 1988884
- lpi104-6/file1
- lpi104-6/file3
- lpi104-6/subdir/file3sub
要查找哪些文件经过符号连接而连接到一个特定文件,可使用 find 命令和 -lname 选项及一个文件名,如 清单 13 所示。连接可使用相对或绝对路径,因此您可能但愿在名称中放入一个前导的星号来找到全部匹配结果。
清单 13. 查找一个文件或目录的符号连接
[plain] view plain copy
- [ian@atticf22 ~]$ find lpi104-6 research/lpi104-6 -lname "*file1"
- lpi104-6/file4
- lpi104-6/file6
- lpi104-6/file5
- research/lpi104-6/file4
复制仍是连接
根据您想要完成的任务,有时会使用连接,有时复制一个文件可能会更好一些。主要区别在于,连接提供了一个文件的多个名称,而副本会在两个不一样的名称下建立两组相同的数据。对于备份和测试用途,确定会使用副本,您但愿试验一个新程序而不让您的操做数据处于风险之中。在须要某个文件(或目录)的别名时(可能用于提供更方面或更短的路径),可使用连接。在下一节中,咱们将介绍连接的其余一些用法。
您已经看到,在更新一个文件时,它全部的连接都会看到更新信息,而复制文件不会这样。您还看到,符号连接能够破坏,后续写入操做能够建立新的文件。请当心使用连接。
连接和系统管理
连接(尤为是符号连接)一般用在 Linux 系统管理中。命令一般具备别名,因此用户不须要知道当前命令的版本号,但在必要的时候,可使用更长的名称来访问其余版本。如 清单 14所示,python 命令是python2 的 symlink,python2 自己是 2.7 版的 python2.7 的 symlink。
清单 14. 将命令别名化为一个特定版本
[plain] view plain copy
- [ian@atticf22 ~]$ which python
- /usr/bin/python
- [ian@atticf22 ~]$ ls -l /usr/bin/python
- lrwxrwxrwx. 1 root root 7 May 27 14:12 /usr/bin/python -> python2
- [ian@atticf22 ~]$ ls -l /usr/bin/python2
- lrwxrwxrwx. 1 root root 9 May 27 14:12 /usr/bin/python2 -> python2.7
- [ian@atticf22 ~]$ ls -l /usr/bin/python2.7
- -rwxr-xr-x. 1 root root 7120 May 27 14:12 /usr/bin/python2.7
在多个命令名称使用相同的基础代码时,好比存储和从新启动系统的各类命令,其余用途就能够派上用场。有时,一个新命令名称(好比 genisoimage )将取代旧命令名称,但旧名称 (mkisofs) 保持为新命令的连接。一些替代性 工具会普遍使用连接,因此您能够在多个替代性工具中选择一个来用于某条命令,好比java 。清单 15显示了一些示例。
清单 15. 命令别名的示例
[plain] view plain copy
- [ian@atticf22 ~]$ which halt
- /usr/sbin/halt
- [ian@atticf22 ~]$ ls -l /usr/sbin/halt
- lrwxrwxrwx. 1 root root 16 Jun 9 09:16 /usr/sbin/halt -> ../bin/systemctl
- [ian@atticf22 ~]$ find /usr/sbin /usr/bin -lname "*/systemctl"
- /usr/sbin/halt
- /usr/sbin/telinit
- /usr/sbin/shutdown
- /usr/sbin/runlevel
- /usr/sbin/poweroff
- /usr/sbin/reboot
- [ian@atticf22 ~]$ which mkisofs
- /usr/bin/mkisofs
- [ian@atticf22 ~]$ ls -l /usr/bin/mkisofs
- lrwxrwxrwx. 1 root root 25 Jun 15 08:02 /usr/bin/mkisofs -> /etc/alternatives/mkisofs
- [ian@atticf22 ~]$ alternatives --display mkisofs
- mkisofs - status is auto.
- link currently points to /usr/bin/genisoimage
- /usr/bin/genisoimage - priority 50
- slave mkisofs-mkhybrid: /usr/bin/genisoimage
- slave mkisofs-mkhybridman: /usr/share/man/man1/genisoimage.1.gz
- slave mkisofs-mkisofsman: /usr/share/man/man1/genisoimage.1.gz
- Current `best' version is /usr/bin/genisoimage.
库名称一般也使用 symlink 来管理,不管是容许程序在获取当前版本时连接到通常名称,仍是管理系统,好比可以运行 32 位程序的 64 位系统。清单 16显示了一些示例。请注意,一些状况会使用绝对路径,而另外一些状况会使用相对路径。
清单 16. 库连接
[plain] view plain copy
- [ian@atticf22 ~]$ ls -l /usr/lib*/libm.so*
- lrwxrwxrwx. 1 root root 21 Feb 23 10:31 /usr/lib64/libm.so -> ../../lib64/libm.so.6
- lrwxrwxrwx. 1 root root 12 Feb 23 10:33 /usr/lib64/libm.so.6 -> libm-2.21.so
- lrwxrwxrwx. 1 root root 12 Feb 23 10:35 /usr/lib/libm.so.6 -> libm-2.21.so
- [ian@atticf22 ~]$ find /usr/lib/ /usr/lib64/ -lname "*libstdc++*"
- /usr/lib/gcc/x86_64-redhat-linux/5.1.1/libstdc++.so
- /usr/lib/gcc/x86_64-redhat-linux/5.1.1/32/libstdc++.so
- /usr/lib/gcc/x86_64-redhat-linux/5.1.1/32/libstdc++.a
- /usr/lib64/libstdc++.so.6
- [ian@atticf22 ~]$ ls -l /usr/lib64/libstdc++.so.6
- lrwxrwxrwx. 1 root root 19 Jun 18 06:52 /usr/lib64/libstdc++.so.6 -> libstdc++.so.6.0.21
- [ian@atticf22 ~]$ ls -l /usr/lib64/libwbclient*
- lrwxrwxrwx. 1 root root 19 Jul 1 10:37 /usr/lib64/libwbclient.so.0 -> libwbclient.so.0.12
- lrwxrwxrwx. 1 root root 40 Jul 1 10:37 /usr/lib64/libwbclient.so.0.12 ->
- /etc/alternatives/libwbclient.so.0.12-64
原文地址:
http://blog.csdn.net/sinat_31726559/article/details/51835785
1 . 使用方式 :ln [option] source_file dist_file
-f 创建时,将同档案名删除.
-i 删除前进行询问.
ln -s abc cde 创建abc 的软链接
ln abc cde 创建abc的硬链接,
2. 软连接与硬连接的区别(通俗):
硬连接可认为是一个文件拥有两个文件名;而软连接则是
系统新建一个连接文件,此文件指向其所要指的文件
3. 软连接与硬连接的区别(讲解):
Linux 软链接与硬链接
对于一个文件来讲,有惟一的索引接点与之对应,而对于一个索引接点号,却能够有多个文件名与之对应。所以,在磁盘上的同一个文件能够经过不一样的路径去访问该文件。注意在Linux下是一切皆文件的啊,文件夹、新加的硬盘 ...均可以看着文件来处理的啊。
链接有软链接和硬链接(hard link)之分的,软链接(symbolic link)又叫符号链接。符号链接至关于Windows下的快捷方式。
不能够对文件夹创建硬链接的,咱们一般用的仍是软链接比较多。
eg:
ln -s source dist # 创建软链接
ln source dist # 创建硬链接
软连接实际上只是一段文字,里面包含着它所指向的文件的名字,系统看到软连接后自动跳到对应的文件位置处进行处理;相反,硬联接为文件开设一个新的目录 项,硬连接与文件原有的名字是平权的,在Linux看来它们是等价的。因为这个缘由,硬连接不能链接两个不一样文件系统上的文件。
(1)软链接能够 跨文件系统 ,硬链接不能够 。实践的方法就是用共享文件把windows下的 aa.txt文本文档链接到linux下/root目录 下 bb,cc . ln -s aa.txt /root/bb 链接成功 。ln aa.txt /root/bb 失败 。
(2)关于 I节点的问题 。硬链接无论有多少个,都指向的是同一个I节点,会把 结点链接数增长,只要结点的链接数不是 0,文件就一直存在,无论你删除的是源文件仍是 链接的文件 。只要有一个存在 ,文件就 存在 (其实也不分什么源文件链接文件的 ,由于他们指向都是同一个 I节点)。 当你修改源文件或者链接文件任何一个的时候 ,其余的文件都会作同步的修改。软连接不直接使用i节点号做为文件指针,而是使用文件路径名做为指针。因此 删除链接文件 对源文件无影响,可是删除源文件,链接文件就会找不到要指向的文件 。软连接有本身的inode,并在磁盘上有一小片空间存放路径名.
(3)软链接能够对一个不存在的文件名进行链接 。
(4)软链接能够对目录进行链接。
备 注:I节点 :它是UNIX内部用于描述文件特性的数据结构.咱们一般称I节点为文件索引结点(信息结点).i节点含有关于文件的大部分的重要信息,包括文件数据块在 磁盘上的地址.每个I节点有它本身的标志号,咱们称为文件顺序号.I节点包含的信息 1.文件类型 2.文件属主关系 3.文件的访问权限 4.文件的时间截.
最后 删除符号连接,有建立就有删除
rm -rf symbolic_name 注意不是rm -rf symbolic_name/
1.Linux连接概念
Linux连接分两种,一种被称为硬连接(Hard Link),另外一种被称为符号连接(Symbolic Link)。默认状况下,ln命令产生硬连接。
【硬链接】
硬链接指经过索引节点来进行链接。在Linux的文件系统中,保存在磁盘分区中的文件无论是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在Linux中,多个文件名指向同一索引节点是存在的。通常这种链接就是硬链接。硬链接的做用是容许一个文件拥有多个有效路径名,这样用户就能够创建硬链接到重要文件,以防止“误删”的功能。其缘由如上所述,由于对应该目录的索引节点有一个以上的链接。只删除一个链接并不影响索引节点自己和其它的链接,只有当最后一个链接被删除后,文件的数据块及目录的链接才会被释放。也就是说,文件真正删除的条件是与之相关的全部硬链接文件均被删除。
【软链接】
另一种链接称之为符号链接(Symbolic Link),也叫软链接。软连接文件有相似于Windows的快捷方式。它其实是一个特殊的文件。在符号链接中,文件其实是一个文本文件,其中包含的有另外一文件的位置信息。
2.经过实验加深理解
[oracle@Linux]$ touch f1 #建立一个测试文件f1
[oracle@Linux]$ ln f1 f2 #建立f1的一个硬链接文件f2
[oracle@Linux]$ ln -s f1 f3 #建立f1的一个符号链接文件f3
[oracle@Linux]$ ls -li # -i参数显示文件的inode节点信息
total 0
9797648 -rw-r--r-- 2 oracle oinstall 0 Apr 21 08:11 f1
9797648 -rw-r--r-- 2 oracle oinstall 0 Apr 21 08:11 f2
9797649 lrwxrwxrwx 1 oracle oinstall 2 Apr 21 08:11 f3 -> f1
从上面的结果中能够看出,硬链接文件f2与原文件f1的inode节点相同,均为9797648,然而符号链接文件的inode节点不一样。
[oracle@Linux]$ echo "I am f1 file" >>f1
[oracle@Linux]$ cat f1
I am f1 file
[oracle@Linux]$ cat f2
I am f1 file
[oracle@Linux]$ cat f3
I am f1 file
[oracle@Linux]$ rm -f f1
[oracle@Linux]$ cat f2
I am f1 file
[oracle@Linux]$ cat f3
cat: f3: No such file or directory
经过上面的测试能够看出:当删除原始文件f1后,硬链接f2不受影响,可是符号链接f1文件无效
3.总结
依此您能够作一些相关的测试,能够获得如下所有结论:
1).删除符号链接f3,对f1,f2无影响;
2).删除硬链接f2,对f1,f3也无影响;
3).删除原文件f1,对硬链接f2没有影响,致使符号链接f3失效;
4).同时删除原文件f1,硬链接f2,整个文件会真正的被删除。
【硬连接(Hard Link)】
硬连接指经过索引节点来进行链接,在Linux为文件系统中,保存在磁盘分区中的文件无论是什么类型都给它分配一个编号,称为索引节点号;
硬连接指的就是在Linux中,多个文件名指向同一索引节点;
常见用途:经过创建硬连接到重要文件,防止误删,删除其实对应的是删除其中的一个硬连接,当文件对应的硬连接都被删除了,该文件才真正被删除;
注意: 默认状况下,ln命令产生硬连接;
点击(此处)折叠或打开
- [root@centos7 home]# vi 1.txt
- hello, this is 1.
- [root@centos7 home]# cp -l 1.txt 2.txt # 为1.txt创建硬连接2.txt,等同于ln 1.txt 2.txt
- [root@centos7 home]# more 2.txt # 查看2.txt文件中的内容和1.txt文件内容同样
- hello, this is 1.
- # 这两个文件的索引节点号,能够看见索引号同样:
- [root@centos7 home]# ls -li
- 总用量 69868
- 33845219 -rw-r--r--. 2 root root 44 1月 21 10:12 1.txt
- 33845219 -rw-r--r--. 2 root root 44 1月 21 10:12 2.txt
- [root@centos7 home]# vi 2.txt # 编辑2.txt,在末未添加:
- hello, this is 2.
- [root@centos7 home]# more 1.txt # 查看1.txt中是否内容改动
- hello, this is 1.
- hello, this is 2.
- [root@centos7 home]# rm -f 1.txt # 删除1.txt
- [root@centos7 home]# more 2.txt # 查看2.txt的内容
- hello, this is 1.
- hello, this is 2.
- 建立硬连接命令:cp -l 1.txt 2.txt等同于ln 1.txt 2.txt # 为1.txt创建硬连接2.txt
【软连接】
也成为符号连接(Symbolic Link),相似于Windows的快捷方式,其中包含的是另外一个文件的位置信息;
点击(此处)折叠或打开
- [root@centos7 home]# cp -s 2.txt sLink # 为2.txt文件创建符号连接sLink,等同于ln –s 2.txt sLink
- [root@centos7 home]# ls –li # 能够看到两个文件有不一样的索引节点号
- 总用量 69864
- 33845219 -rw-r--r--. 1 root root 44 1月 21 10:12 2.txt
- 36830246 lrwxrwxrwx. 1 root root 5 1月 21 10:21 sLink -> 2.txt
- [root@centos7 home]# more sLink
- hello, this is 1.
- hello, this is 2.
- [root@centos7 home]# rm -f sLink # 删除符号连接,不影响源文件
- [root@centos7 home]# more 2.txt
- hello, this is 1.
- hello, this is 2.
- [root@centos7 home]# rm -f 2.txt # 删除2.txt
- [root@centos7 home]# ls -li
- 总用量 69860
- 36830246 lrwxrwxrwx. 1 root root 5 1月 21 10:21 sLink -> 2.txt
- [root@centos7 home]# more sLink
- sLink: 没有那个文件或目录
建立符号连接命令:cp -s 2.txt sLink 等同于ln –s 2.txt sLink # 为2.txt文件创建符号连接sLink
注意:
只能在同种存储媒体上的文件之间建立硬连接(Hard Link),不能在不一样挂载点下的文件间建立硬连接,对于后一种状况,可使用软连接;(区分不一样挂载点与同一挂载点不一样目录)
如跨不一样的挂载点创建硬连接的报错信息:
[root @centos7 home] # ln 2.txt /dev/hLink
ln : 没法建立硬连接 "/dev/hLink" => "2.txt" : 无效的跨设备链接
小结:
1: 硬连接是同一文件的不一样访问路径,其对应的索引节点号是同样的,删除文件其实就是删除其中的一个硬连接,若是该文件对应的硬连接都被删除了该文件才被删除,经常使用于保护文件; 2: 符号连接相似于Windows中对应的快捷方式,删除符号连接不影响源文件,删除源文件,则对应的符号连接也没有意义;