当我们在命令行中输入ll
时会出现很多行信息,详情请看下面的图 ε=ε=ε=(~ ̄▽ ̄)~
我在之前的几篇Linux的文章也讲过哦(o゚v゚)ノ
是不是有硬链接,就有软链接呢?🤔🤨
接下来我们就来介绍介绍这两个东西啦🙂
接下来我就用例子来让大家见见软链接和硬链接吧
当我们的一个可执行程序在这个路径下
/home/xkjtx/linux-code/zijideku/usrlib/main
,我们每次都要用这个路径才能执行该程序,这是不是非常麻烦啊😣😣
答案是:肯定有啊,这就是我们要说的软链接
软链接的命令
ln 可执行程序的路径 -s 软链接的名字
比如我要将刚刚的/home/xkjtx/linux-code/zijideku/usrlib/main
用soft.link
就可以运行,则就可以这样子写
ln /home/xkjtx/linux-code/zijideku/usrlib/main -s soft.link
这样我们就不需要输入/home/xkjtx/linux-code/zijideku/usrlib/main
才能运行main
这个可执行程序,而可以直接用./soft.link
来运行该程序啦~~
是不是很方便呢d=====( ̄▽ ̄*)b
我们在创建软链接的目录里输入ll
时,就可以发现soft.link
链接的是哪个路径啦
细心的同学就发现啦,第一行中的第一个字母和平时的文件的字母不一样哦,我就来讲讲常见的几个吧
-
:普通文件d
:文件夹l
:软链接c
:字符设备文件b
:块设备文件p
:命名管道(FIFO)s
:套接字文件当我们把软链接的命令的-s
去掉后,就是硬链接的命令啦
ln 可执行程序的路径 硬链接的名字
同样用刚刚的/home/xkjtx/linux-code/zijideku/usrlib/main
来演示,当我们输入
ln /home/xkjtx/linux-code/zijideku/usrlib/main hard.link
时,我们会发现目录中多了个硬链接啦
和软链接的区别
-
我们的可执行程序有两种形成方式
接下来我用bo_ke_code.cpp
这个文件的编译生成可执行程序来举例
- 当我们输入**`g++ -o bo_ke_code bo_ke_code.cpp -std=c++11`**时,默认为软链接,也就是动态链接,我们可以具体观察一下`ll`时的第五列的数字(也就是**文件大小**)
- 当我们输入`g++ -o bo_ke_code_hard bo_ke_code.cpp -std=c++11` **`-static`**时,为链硬接,也就是静态链接,我们可以再观察一下`ll`时的**文件大小**,可以对比一下软链接时的区别
我们会发现
思考:
原因:
也就是说,硬链接会将函数的代码拷贝进我们的代码,这也就是为啥它的文件大小远远大于动态链接的原因
相信的小程序员们会在平时的Linux操作时会发现当我们创建一个文件夹时,前面的硬链接数为2,而普通文件时,硬链接数为1
问题: 为什么普通文件的硬链接数为1? 原因: 硬链接数是标识有几个硬链接指向该文件,而每个文件的文件名会与自己硬链接,所以每个文件创建时至少有一个硬链接数 问题: 那为什么文件夹的硬链接数为2呢?? 原因: 我在Linux的常用指令 和 基础知识穿插巩固(巩固知识必看)-CSDN博客中就讲解过Windows和Linux下隐藏文件的命名规则,也就是在文件名最开始加入
.
,当我们进入一个文件夹后,我们可以输入ls -a
,就会发现有如下的部分
我们也都知道
.
代表当前路径..
代表上一级路径而我们的目录中的所有文件对
该目录下的其他文件
操作时,就要进行操作 ./其他文件
,所以一个目录中会有一个**.
**代表该目录
这也就解释了为啥新建的目录的硬链接数是2啦~~
到这里我就要问聪明的你一个问题啦*ε=ε=ε=(~ ̄▽ ̄)~
该目录
下只有一个目录,则该目录
的硬链接数是3)该目录
里的这个新目录
里有一个 ..
,而这个 ..
代表的就是该目录
啦,所以硬链接数++问你一个问题哦,你可以在心里回答一下哦😉😶