最近发现一个命令ln非常好用,可以用它来更改命令行中软件的默认版本,比如更改cuda和python的默认版本;还可以在用lighttp共享文件目录的时候直接创建软链接而不用复制文件。
命令格式
ln [参数] [ 源文件或目录] [目标文件或目录(也就是要生成的文件或目录)]
命令功能
给文件建立链接,也就是建立文件的别名,可以通过链接访问源文件,链接文件只是一个文件入口,并不占用很大的磁盘空间。链接分为两种: 硬链接(hard link)与软链接(又称符号链接,即 soft link 或 symbolic link)。
命令参数
必要参数:
-s
:软链接(符号链接)
-b
: 删除,覆盖以前建立的链接
-d
:允许超级用户制作目录的硬链接
-f
:强制执行
-i
:交互模式,文件存在则提示用户是否覆盖
-n
:把符号链接视为一般目录
-v
:显示详细的处理过程
选择参数:
-S
“-S<字尾备份字符串> ”或 “–suffix=<字尾备份字符串>”
-V
“-V<备份方式>”或“–version-control=<备份方式>”
--help
显示帮助信息
--version
显示版本信息
选择参数基本用不着,基本不需要了解怎么用。
一些注意
- 链接如果是用相对路径创建的链接,那么移动链接以后,链接会编程死链;所以,如果想要移动链接,用绝对路径创建链接。
- 不管是软链接还是硬链接,都是修改那一个地方,对应的链接的文件都同样改动;也就是不管是软链接还是硬链接,文件都保持同步变化。
- 软链接只是在相应位置生成一个符号链接,不占用磁盘空间;硬链接在相应位置生成一个与源文件大小相同的文件。
软链接和硬链接的区别
找了好多网上好多文章,说的都不是很清楚,所以总结一下软链接和硬链接的区别。
软链接:
- 软链接,以路径的形式存在。类似于Windows操作系统中的快捷方式
- 软链接可以 跨文件系统 ,硬链接不可以
- 软链接可以对一个不存在的文件名进行链接
- 软链接可以对目录进行链接
硬链接:
- 硬链接,以文件副本的形式存在。但不占用实际空间。
- 不允许给目录创建硬链接
- 硬链接只有在同一个文件系统中才能创建
网上找到的一般都是说的上面这些区别,另外还着重提到了不管是软链接还是硬链接都不怎么占用磁盘空间,软链接比较好理解,但是硬链接不是在相应位置生成一个与源文件大小相同的文件吗,为什么也会不怎么占用磁盘空间。
解答这个问题,首先要了解一下Linux下的文件系统。
数据文件被分成两个部分:用户数据 (user data) 与元数据 (metadata)。用户数据,即文件数据块(data block),数据块是记录文件真实内容的地方;而元数据则是描述数据的数据,比如文件的附加属性,如文件大小、创建时间、所有者等信息。
上图展示了通过文件名获得磁盘上文件内容的过程。在Linux中,元数据中的inode号(索引节点号,是元数据的一部分但是不包括文件名)才是文件的唯一标识而非文件名。文件名是给人来看的,方便人们记忆和使用,对于系统和程序只认inode号(索引节点号)。Liunx下可以通过stat filename
来查看文件的inode号。
搞清楚上面这个问题,上面所有的软链接和硬链接的问题都迎刃而解。
软硬链接的作用原理如上图所示,软链接就是一个普通文件,只是数据块内容有点特殊,数据块的内容是指向另外一个文件名;而硬链接都只是指向相同的inode号,而在磁盘中真正存储数据课占用磁盘空间的是data block,外在显示的filename只是给人看的,并不占什么磁盘空间,所以说硬链接也不占用磁盘空间。
另外,inode号随着文件的存在而存在,并且在文件系统中inode号是唯一的,当Linux挂载多个文件系统时,多个文件系统可能会出现inode号重复的情况,这就是为什么硬链接不能跨文件系统,而软链接可以。
到这里就基本弄清楚了软链接和硬链接的原理,但是我在想既然有软链接为什么还要硬链接,在电脑上看到很多地方都有软链接,比如cuda和python版本指定的时候都是指定软链接的,硬链接很少用到。
其实硬链接的用处还是很多的,首先能够很好地防止误删,删除一个硬链接只是删除了一个从文件名到inode号的映射,通过其他的硬链接依旧能访问。另外,删掉源文件名,依旧可以通过硬链接访问data block中的内容,而删掉源文件名软链接就变成死链了;还有,对于任何一个文件我执行stat命令都会显示有一个硬链接,这样说来所有的文件名本质就是一个硬链接,所以平时删除文件其实只是删除了所有filename到inode的映射而已。另外,硬链接还可以隐藏文件路径,比如创建一个路径下的文件硬链接,然后将硬链接放到其他地方,这样编辑的时候可以直接打开硬链接编辑,内容会在原路径下的文件中更新而又不会暴露原文件路径。
至此,终于搞清楚了ln名的用法和软硬链接的原理。
Reference:
最新评论
感谢博主,让我PyTorch入了门!
博主你好,今晚我们下馆子不?
博主,你的博客用的哪家的服务器。
您好,请问您对QNN-MO-PYNQ这个项目有研究吗?想请问如何去训练自己的数据集从而实现新的目标检测呢?
where is the source code ? bomb1 188 2 8 0 0 hello world 0 0 0 0 0 0 1 1 9?5
在安装qemu的过程中,一定在make install 前加入 sudo赋予权限。
所以作者你是训练的tiny-yolov3还是yolov3...
很有用