目录
我的历程
因为每次在linux下跑实验,都会对数据集涉及到一个操作,就是生成数据集的软连接,可以大大的节约内存,不用在不同项目用同一个数据集的时候,把数据集一一复制到项目文件里。 但是我再win10跑实验的时候好像没有这个操作。所以我就想能不能找到类似的操作指令,后面发现就是 mklink指令。现在刚好遇到个因为创建软连接引起来的bug,现在做个总结 。
linux软链接硬链接复制的区别
先看看这个
linux软链接硬链接复制的区别: link.
linux 下的软硬连接操作
https://www.cnblogs.com/sueyyyy/p/10985443.html
ln -s [源文件或目录] [目标文件或目录]
当前路径创建test 引向/var/www/test 文件夹
ln –s /var/www/test test
创建/var/test 引向/var/www/test 文件夹
ln –s /var/www/test /var/test
删除软链接
和删除普通的文件是一样的,删除都是使用rm来进行操作
删除test
rm –rftest
修改软链接
ln –snf [新的源文件或目录] [目标文件或目录]
这将会修改原有的链接地址为新的地址
创建一个软链接
ln –s /var/www/test /var/test
修改指向的新路径
ln –snf /var/www/test1 /var/test
常用参数:
-f : 链结时先将与 dist 同档名的档案删除
-d : 允许系统管理者硬链结自己的目录
-i : 在删除与 dist 同档名的档案时先进行询问
-n : 在进行软连结时,将 dist 视为一般的档案
-s : 进行软链结(symbolic link)
-v : 在连结之前显示其档名
-b : 将在链结时会被覆写或删除的档案进行备份
-S SUFFIX : 将备份的档案都加上 SUFFIX 的字尾
-V METHOD : 指定备份的方式
--help : 显示辅助说明
--version : 显示版本
windows下的软硬链接
mklink指令
1、打开开始菜单,搜索:cmd 在命令提示符上单击右键,选择【以管理员身份运行】; 快捷键 win+R ;或者直接在文件夹位置 输入cmd
2、在命令提示符中键入:mklink /? 系统会给出 mklink 命令的帮助:
创建符号链接。
MKLINK [[/D] | [/H] | [/J]] Link Target
/D 创建目录符号链接。默认为文件符号链接。
/H 创建硬链接而非符号链接。
/J 创建目录联接。
Link 指定新的符号链接名称。
Target 指定新链接引用的路径(相对或绝对)。
mklink小实验 建议自己动手
mklink命令怎么用?教你win10中使用mklink命令的方法
http://www.winwin7.com/JC/19487.html
我的实验实际使用
生成数据集的软连接 cmd中使用
mklink /j 目标文件 源文件
成功后pycharm 中的项目效果图
注意:
1.硬链接实际上是为文件建一个别名,链接文件和原文件实际上是同一个文件。可以通过ls -i来查看一下,这两个文件的inode号是同一个,说明它们是同一个文件;而软链接建立的是一个指向,即链接文件内的内容是指向原文件的指针,它们是两个文件。
2.硬链接只能用于文件,不能用于目录;软链接可以为目录建链接。 (特别注意这点,我遇到bug了)
3.硬链接不能跨文件系统操作。
A硬链B 删除B后A依然存在,且可用。
A软链B 删除B后A存在,但不可用了(相当于Windows下快捷方式指向的目标不存在了)
我遇到的bug PermissionError: [Errno 13] Permission denied
开始我为一个训练好的权重文件 AlexNet.pth (不是目录文件)在另一个项目生成软链接 ,cmd窗口没有报错,代码这样的。
mklink /j F:\WorkSpace\Python\deep-learning-for-image-processing\pytorch_classification\analyze_weights_featuremap\AlexNet.pth F:\WorkSpace\Python\deep-learning-for-image-processing\pytorch_classification\Test2_alexnet\AlexNet.pth
项目运行,调用这个文件的时候发生了错误
PermissionError: [Errno 13] Permission denied ./AlexNet.pth
然后我打开文件夹所在位置,双击打开也是报错了。
所以我就开始百度问题,开始以为是权限问题,后面在源文件 右键属性 修改了权限还是报错,我就开始搜mklink 后报错 ,发现了是软链接和硬链接的问题。 所以我就改成了硬链接 就是 /j 和 /h的区别。
生成权重文件的硬链接
mklink /h F:\WorkSpace\Python\deep-learning-for-image-processing\pytorch_classification\analyze_weights_featuremap\AlexNet.pth F:\WorkSpace\Python\deep-learning-for-image-processing\pytorch_classification\Test2_alexnet\AlexNet.pth
为 F:\WorkSpace\Python\deep-learning-for-image-processing\pytorch_classification\analyze_weights_featuremap\AlexNet.pth <<===>> F:\WorkSpace\Python\deep-learning-for-image-processing\pytorch_classification\Test2_alexnet\AlexNet.pth 创建了硬链接
这样生成硬链接之后,项目运行用这个权重文件没有报错,完美解决啦