理解 Linux 连接

  理解 Linux 连接

有人给我说不是很了解Linux连接,今天我就来普及一下什么是Linux连接:node

连接是能够将文件和目录放在你但愿它们放在的位置的另外一种方式。框架

 

除了 cp 和 mv 这两个咱们在本系列的前一部分中详细讨论过的,连接是能够将文件和目录放在你但愿它们放在的位置的另外一种方式。它的优势是可让你同时在多个位置显示一个文件或目录。编辑器

 

如前所述,在物理磁盘这个级别上,文件和目录之类的东西并不真正存在。文件系统是为了方便人类使用,将它们虚构出来。但在磁盘级别上,有一个名为分区表partition table的东西,它位于每一个分区的开头,而后数据分散在磁盘的其他部分。测试

 

虽然有不一样类型的分区表,可是在分区开头的那个表包含的数据将映射每一个目录和文件的开始和结束位置。分区表的就像一个索引:当从磁盘加载文件时,操做系统会查找表中的条目,分区表会告诉文件在磁盘上的起始位置和结束位置。而后磁盘头移动到起点,读取数据,直到它到达终点,您看:这就是你的文件。动画

 

硬连接spa

 

硬连接只是分区表中的一个条目,它指向磁盘上的某个区域,表示该区域已经被分配给文件。换句话说,硬连接指向已经被另外一个条目索引的数据。让咱们看看它是如何工做的。操作系统

 

打开终端,建立一个实验目录并进入:.net

 

mkdir test_dir设计

cd test_dir索引

使用 touch 建立一个文件:

 

touch test.txt

为了得到更多的体验(?),在文本编辑器中打开 test.txt 并添加一些单词。

 

如今经过执行如下命令来创建硬连接:

 

ln test.txt hardlink_test.txt

运行 ls,你会看到你的目录如今包含两个文件,或者看起来如此。正如你以前读到的那样,你真正看到的是彻底相同的文件的两个名称: hardlink_test.txt 包含相同的内容,没有填充磁盘中的任何更多空间(能够尝试使用大文件来测试),并与 test.txt 使用相同的 inode:

 

$ ls -li *test*

16515846 -rw-r--r-- 2 paul paul 14 oct 12 09:50 hardlink_test.txt

16515846 -rw-r--r-- 2 paul paul 14 oct 12 09:50 test.txt

ls 的 -i 选项显示一个文件的 “inode 数值”。“inode” 是分区表中的信息块,它包含磁盘上文件或目录的位置、上次修改的时间以及其它数据。若是两个文件使用相同的 inode,那么不管它们在目录树中的位置如何,它们在实际上都是相同的文件。

 

软连接

 

软连接,也称为符号连接symlink,它与硬连接是不一样的:软连接其实是一个独立的文件,它有本身的 inode 和它本身在磁盘上的小块地方。但它只包含一小段数据,将操做系统指向另外一个文件或目录。

 

你可使用 ln 的 -s 选项来建立一个软连接:

 

ln -s test.txt softlink_test.txt

这将在当前目录中建立软连接 softlink_test.txt,它指向 test.txt。

 

再次执行 ls -li,你能够看到两种连接的不一样之处:

 

$ ls -li

total 8

16515846 -rw-r--r-- 2 paul paul 14 oct 12 09:50 hardlink_test.txt

16515855 lrwxrwxrwx 1 paul paul 8 oct 12 09:50 softlink_test.txt -> test.txt

16515846 -rw-r--r-- 2 paul paul 14 oct 12 09:50 test.txt

hardlink_test.txt 和 test.txt 包含一些文本而且字面上占据相同的空间。它们使用相同的 inode 数值。与此同时,softlink_test.txt 占用少得多,而且具备不一样的 inode 数值,将其标记为彻底不一样的文件。使用 ls 的 -l 选项还会显示软连接指向的文件或目录。

 

为何要用连接?

 

它们适用于带有本身环境的应用程序。你的 Linux 发行版一般不会附带你须要应用程序的最新版本。以优秀的 Blender 3D 设计软件为例,Blender 容许你建立 3D 静态图像以及动画电影,人人都想在本身的机器上拥有它。问题是,当前版本的 Blender 至少比任何发行版中的自带的高一个版本。

 

幸运的是,Blender 提供能够开箱即用的下载。除了程序自己以外,这些软件包还包含了 Blender 须要运行的复杂的库和依赖框架。全部这些数据和块都在它们本身的目录层次中。

 

每次你想运行 Blender,你均可以 cd 到你下载它的文件夹并运行:

 

./blender

但这很不方便。若是你能够从文件系统的任何地方,好比桌面命令启动器中运行 blender 命令会更好。

 

这样作的方法是将 blender 可执行文件连接到 bin/ 目录。在许多系统上,你能够经过将其连接到文件系统中的任何位置来使 blender 命令可用,就像这样。

 

ln -s /path/to/blender_directory/blender /home/<username>/bin

你须要连接的另外一个状况是软件须要过期的库。若是你用 ls -l 列出你的 /usr/lib 目录,你会看到许多软连接文件一闪而过。仔细看看,你会看到软连接一般与它们连接到的原始文件具备类似的名称。你可能会看到 libblah 连接到 libblah.so.2,你甚至可能会注意到 libblah.so.2 相应连接到原始文件 libblah.so.2.1.0。

 

这是由于应用程序一般须要安装比已安装版本更老的库。问题是,即便新版本仍然与旧版本(一般是)兼容,若是程序找不到它正在寻找的版本,程序将会出现问题。为了解决这个问题,发行版一般会建立连接,以便挑剔的应用程序相信它找到了旧版本,实际上它只找到了一个连接并最终使用了更新的库版本。

 

有些是和你本身从源代码编译的程序相关。你本身编译的程序一般最终安装在 /usr/local 下,程序自己最终在 /usr/local/bin 中,它在 /usr/local/bin 目录中查找它须要的库。但假设你的新程序须要 libblah,但 libblah 在 /usr/lib 中,这就是全部其它程序都会寻找到它的地方。你能够经过执行如下操做将其连接到 /usr/local/lib:

 

ln -s /usr/lib/libblah /usr/local/lib

或者若是你愿意,能够 cd 到 /usr/local/lib:

 

cd /usr/local/lib

而后使用连接:

 

ln -s ../lib/libblah

还有几十个案例证实软连接是有用的,当你使用 Linux 更熟练时,你确定会发现它们,但这些是最多见的。下一次,咱们将看一些你须要注意的连接怪异。

 

经过 Linux 基金会和 edX 的免费 “Linux 简介”课程了解有关 Linux 的更多信息。

好了,这就是Linux连接了。更多内容欢迎访问www.dianyu.net.

相关文章
相关标签/搜索