Linux-ln命令创建链接(软连接/硬链接)

1.ln命令介绍

ln命令可以看作是 link 的缩写,其功能是创建文件间的链接,链接类型包括硬链接(hard link)和软链接(符号链接,symbolic link)

 

2.ln命令格式

ln 命令的基本格式如下:

ln [选项] 源文件 目标文件

选项:

-s:建立软链接文件。如果不加 "-s" 选项,则建立硬链接文件;

-f:强制。如果目标文件已经存在,则删除目标文件后再建立链接文件;

 

3.软连接

ln -s [源文件] [目标文件]   ## 创建软连接

说明:软链接生成的是符号链接文件(l 类型)

          源文件没了或者路径改变,ls -l 查看时会看到源文件有红色背景不断闪烁。

示例:

ln -s /linux/file.txt softlink.txt

 

软链接小结:

1)、软链接类似于 Windows 的快捷方式,里面存放着源文件的路径,指向源文件实体;

2)、删除了源文件,软链接文件依然存在,但是无法访问指向源文件路径的内容;

3)、源文件和软链接文件是不同类型的文件,inode 索引节点也不相同;

4)、对于目录,不可以创建硬链接,但是可以创建软链接;

 

4.硬链接

ln [源文件] [目标文件]   ##创建硬链接

说明:硬链接生成的是普通文件(- 字符 f类型)

         硬链接除了名称和位置,其它信息都相同, 包括日期, 没法区分。

         权限信息后面一列,可以看到文件被link的次数

示例:

ln /linux/file.txt hardlink.txt
ls -i   ##查看文件的inode号

 

硬链接小结:

1)、源文件和硬链接文件具有相同的 inode 索引节点号;两者可以看成同一个文件或一个文件的多个入口;

2)、删除硬链接文件或删除源文件任意之一,文件实体并未被删除;

3)、只有删除了源文件和对应的硬链接文件,文件实体才会被删除;

4)、通过给文件设置硬链接文件,来防止重要文件被误删;

5)、许多硬件设备中的快照功能,就是利用硬链接的原理;

 

5.软连接和硬链接区别

1)、硬链接原文件&链接文件共用一个inode号,说明他们是同一个文件;而软链接原文件&链接文件拥有不同的inode号,表明他们是两个不同的文件;

2)、链接数目(inode)是不一样的,软链接的链接数目不会增加,硬链接会相应的加1;

3)、在文件属性上软链接明确写出了是链接文件,而硬链接没有写出来,因为在本质上硬链接文件和原文件是完全平等关系,就像文件被复制了一份一样;  

4)、文件大小是不一样的,硬链接文件显示的大小是跟原文件是一样的,而这里软链接显示的大小与原文件就不同了。

5)、使用限制上,不能对目录创建硬链接,不能对不同文件系统创建硬链接,不能对不存在的文件创建硬链接;可以对目录创建软连接,可以跨文件系统创建软连接,可以对不存在的文件创建软连接。

 

6.打包链接文件

-h参数:打包软链接文件指向的真实源文件

示例:

tar  zcfh  test.tar.gz  softlink.txt

 

本文来自博客园,作者:业余砖家,转载请注明原文链接:http://www.cnblogs.com/yeyuzhuanjia/p/17428613.html

本文转载于网络 如有侵权请联系删除

相关文章

  • 如何简单地找回保存在浏览器里的密码

      一个简单的议题,也是同学们比较常遇到的问题,怎样找回保存在浏览器的“自动填写表单”功能中的密码。最容易想到的当然是抓包。一般的网站数据包里密码就是明文的,不过有些却也不是,可能是经过hash之后传递的(多数大网站)。   还有些浏览器自带此功能,但总有诸多限制。比如chrome需要输入当前windows密码:   猎豹浏览器需要输入之前设置的手势安全锁:   真蛋疼是吧。   这里给一个小技巧,利用javascript来获取当前保存的密码,多浏览器通用的,简单又实用。   我平时多用猎豹浏览器,这里先用猎豹做个例子吧。dnspod应该是安全性要求很高的一个网站了,从域名的https就可以看出。那么,我现在就来找回一下保存在猎豹浏览器中的dnspod密码。   首先来到dnspod,发现存在自动保存的密码:   右键审核元素,看到密码这个input框的id是password。   然后来到控制台,输入password.value即可看到密码了:   是不是很神奇。原理很简单,就是利用了javascript的DOM操作,来获取到DOM中的内容。为什么我记下的是input框的id,因为

  • 【猫狗数据集】谷歌colab之使用pytorch读取自己数据集(猫狗数据集)

    数据集下载地址:链接:https://pan.baidu.com/s/1l1AnBgkAAEhh0vI5_loWKw 提取码:2xq4之前在:https://www.cnblogs.com/xiximayou/p/12398285.html创建好了数据集,将它上传到谷歌colab在colab上的目录如下:在utils中的rdata.py定义了读取该数据集的代码:fromtorch.utils.dataimportDataLoader importtorchvision importtorchvision.transformsastransforms importtorch #预处理 transform=transforms.Compose([transforms.ToTensor()]) path="/content/drive/MyDrive/colabnotebooks/data/dogcat" train_path=path+"/train" test_path=path+"/test" #使用torchvision.d

  • Android网络框架OKhttp3学习笔记

    原文博客:Doi技术团队 链接地址:https://blog.doiduoyi.com/authors/1584446358138 初心:记录优秀的Doi技术团队学习经历 OKhttp3是一个非常强大的Android网络框架,它是由Square公司开发并开源的,很大Android开发者都会使用到,所以我也要来学学。服务器为了方便测试,我们需要一个后台服务器的的应用,下面是一个JavaWeb的Servlet,它的功能是接收客户端发来的登录数据,判断密码是否正确,并返回结果(JSON格式)importjavax.servlet.ServletException; importjavax.servlet.annotation.WebServlet; importjavax.servlet.http.HttpServlet; importjavax.servlet.http.HttpServletRequest; importjavax.servlet.http.HttpServletResponse; importjava.io.IOException; importjava.io.Outp

  • 为什么我不喜欢三范式

    插曲最近,一个远房亲戚的小表弟准备选修专业找到我问:"哥,现在学数据库有没有前途阿?" "当然有啊,前途大大的呢" "那我现在开始学数据库,需要先从什么开始呢?" "学课程的话,先了解下数据库三范式,SQL这些吧" "SQL我大概知道,数据库三范式是什么?" "阿...三范式就是表的主键...唯一性那些东西吧,...嗯,应该就是那些" "什么是主键?" "额.....表弟你不要再问了啦,好好去百度一下行不。" "噢...."复制挂完电话,我舒了口气,由于差点暴露自己已经不记得三范式了这个不争的事实,我悄悄打开了谷歌....数据库的这个三范式的概念,相信大多数人都不会陌生,从懵懵懂懂的大学时代就已经普及到教材了(没记错的话应该在数据库系统概论这本教材里)。还记得那会刚开始找实习的时候,由于自己本事太小,连简历都不知道怎么写好,尤其是擅长技术的部分更是一片空白。于是乎会找来隔壁几个学霸的简历来做参考,

  • 还记得当年的百度贴吧吗? 今天, 有人写了一个去中心化的...

    来源|Embark 编译|王国玺 责编|乔治出品|区块链大本营(blockchain_camp)今天科技圈最大的新闻莫过于百度李彦宏被“浇水”一事了,微博、微信、今日头条可谓是炸开了锅,但想想要是10年前,讨论最火的地方可能不是这些app,无疑是百度贴吧了,但可能面临删帖的危险...这时,区块链的不可篡改性就帮上了大忙!今天营长就使用DApp开发框架Embark,手把手教你构建一个去中心化的社交新闻网站,从主要分以下三个部分:明确DApp需求,部署智能合约;使用DApp开发框架Embark的JavaScript程序库EmbarkJS测试智能合约;使用JavaScript用户界面框架React构建DApp的前端。明确DApp需求,部署智能合约。百度贴吧是一个功能非常复杂的平台,因此我们无法做到把它全部推倒重建,我们只会构建出百度贴吧的一些核心功能,并在构建中详细介绍如何使用Embark框架构建DApp。我们的构想非常简单:首先我们给DApp取名为DReddit(去中心化的百度贴吧),它允许用户在其中发布帖子,而其他用户可以凭兴趣以及帖子的质量对帖子进行好评和差评的投票。为了简化开发,DR

  • [HAOI2012]音量调节 状态型dp

    [HAOI2012]音量调节能达到音量赋值1,否则为0,每一种音量可以达到也可以不达到,调高表示取这件物品,调低表示不取。初始化dp[0][be]表示开始能达到音量。最后找到最大音量输出。#include<bits/stdc++.h> usingnamespacestd; #definelllonglong constintM=1005; intn,ma,be; intdp[51][M]; inta[M]; intmain(){ scanf("%d%d%d",&n,&be,&ma); for(inti=1;i<=n;i++)scanf("%d",&a[i]); dp[0][be]=1; for(inti=1;i<=n;i++) for(intj=ma;j>=0;j--){ if(j-a[i]>=0) dp[i][j]=dp[i][j]||dp[i-1][j-a[i]]; if(j+a[i]<=ma) dp[i][j]=dp[i][j]||

  • leetcode: 121. Best Time to Buy and Sell Stock

    DifficultyEasy.ProblemSayyouhaveanarrayforwhichtheithelementisthepriceofagivenstockondayi. Ifyouwereonlypermittedtocompleteatmostonetransaction(i.e., buyoneandselloneshareofthestock),designanalgorithmtofindthemaximumprofit. Notethatyoucannotsellastockbeforeyoubuyone. Example1: Input:[7,1,5,3,6,4] Output:5 Explanation:Buyonday2(price=1)andsellonday5(price=6),profit=6-1=5. Not7-1=6,assellingpriceneedstobelargerthanbuyingprice. Example2: Input:[7,6,4,3,1] Output:0 Explanation:Inthiscase,notran

  • 感觉自己的代码很乱?因为你不懂套路

    编程教室开了这么久,已经有很多人从完全零基础的小白成为了会写代码的菜鸟程序员,能够自己独立开发程序。不过到此阶段,常常会遇到瓶颈,感觉功能可以实现,但代码看起来有些别扭:代码中有很多相似的重复代码代码中有大量的if,以至于有很长的缩进单个代码写得很长,别人很难看懂,过阵子可能自己都看不懂总会有没有考虑到的情况导致bug修复一个bug又会产生新的bug单个功能可以实现,但多个功能组合在一起就理不清如果需求发生变动,代码修改起来很麻烦有多种实现方式时不知道该用哪一种很难和其他人协作开发上述的问题你是不是有过类似困扰?解决的办法其实也简单,就是坚持“多写”和“多读”:多写代码。很多时候你觉得不好处理,并不是因为高深的问题,只是你对代码的基本使用还不够熟练。同样的问题,踩过坑再爬出来,反复几次自然你也知道怎么绕开了。多读代码。除了自己写,看看别人的代码也会学到很多。包括教程里的案例、官方示例、开源项目的源码等。所谓“熟读唐诗三百首,不会作诗也会吟”嘛。除了这两个“笨办法”外,还有样东西,对于处在这个阶段的你或许有很大启发,这就是:设计模式设计模式是对于软件开发中常见的一些问题所总结出的解决方案

  • Ubuntu 常用技巧

    修改启动项rcconf该工具用于设置开机启动项rcconf–list罗列所有开机启动列表rcconf–on开启开机服务rcconf–on关闭开机启动例如sudorcconf--list|grep"wicd"//找到wicd开机启动显示wicdoff sudorcconf--onwicd//开启开机启动复制该工具的原理其实很简单: runlevel查看当前的默认开机运行级别,我的电脑显示N5,对应/etc/rc5.d/里面的启动脚本当rcconf–offwicd其实修改了/etc/rc5.d/S05wicd改为K01wicd修改wlan0名称iplinkset<当前名字>name<之后的名字>//当前窗口有效,关机之后无效永久生效方法如下:sudonano/etc/default/grub 找到GRUB_CMDLINE_LINUX="" 改为GRUB_CMDLINE_LINUX="net.ifnames=0biosdevname=0" 然后sudogrub-mkconfig-o/boot/grub/gru

  • 人机对决!腾讯围棋AI“绝艺”电圣战夺冠(附获胜棋谱)

    【新智元导读】“电圣战”,人机对决。腾讯AILab(腾讯人工智能实验室)研发的围棋人工智能“绝艺”执黑中盘战胜了日本新锐棋手一力辽七段,获得冠军。 腾讯AILab(腾讯人工智能实验室)研发的围棋人工智能“绝艺”执黑中盘战胜了日本新锐棋手一力辽七段,获得冠军。图:绝艺代表(左)正在与一力辽(右)对局UEC赛事的亚军“DeepZenGo”也于今天上午执白中盘战胜了一力辽。“电圣战”由电气通信大学(简称:UEC)与日本棋院于2013年创办,是近日结束的“UEC杯”世界计算机围棋大赛的姊妹赛事,由“UEC杯”冠亚军与人类职业棋手对战。在去年的比赛中,UEC杯冠军deepzen曾授三子击败小林光一名誉棋圣。随着过去一年中AI技术的飞速发展,今年赛制首次改为分先对局,而对局现场由曾经获得过“棋圣”头衔的小林觉九段负责现场解说,中国方面由腾讯新闻进行的赛事直播更是邀请到“棋圣”聂卫平、柯洁九段、罗冼河九段组成的超豪华解说阵容,也折射出了围棋界及腾讯公司对于此次赛事的重视。图:绝艺“电圣战”获胜棋谱本次出战绝艺的人类棋手一力辽是日本棋界公认的希望之星,5岁学弈,宋光复九段门下,曾先后获得应氏杯青少年锦

  • 干货 | 魔镜魔镜告诉我,数字货币未来价格可以预测吗?

    AI科技评论按:自从比特币的价格暴涨以来,关于数字货币的炒作一直不断。每天都有新的数字货币的信息,它们有的被证实是骗局,有些则会在几个月成为新的顶级货币。炒币人士通常会为了一个传言而买入卖出,自然,也会有人尝试用机器学习来对数字货币的价格变化进行分析,来找出影响数字货币价格变动的因素。近日在外媒Medium上,就有一位叫做ChalitaLertlumprasert的博主发表了《如何用机器学习来预测数字货币价格变化》(http://t.cn/RHkeIVh)的文章,AI科技评论整理如下:机器学习分析数字货币价格变化的原理在经典的时间序列分析中,我们认为观察到的时间序列是模式和随机变量的组合。使用这种方法,我们可以根据历史数据预测未来的价值。这种方法在大多数情况下可行,但是如果这个时间序列更加随机化呢?如果一个时间序列主要是基于当前事件的推测,而不是具有一定的内在模式呢?嗯,你一定猜到了,低价数字货币就是这样。那么,究竟是什么在推动数字货币的价格?对于数字货币的猜测?创新?法律问题?公众舆论?供给/需求的变化?比特币的流行程度?甚至,土豪心血来潮决定购买一百万个代币?OK,现在是让数据说话

  • 学习前端开发的几个假象

    1,你并不喜欢前端开发,也不喜欢js,你只是听说前端工资高。许多人学不进去或是学的不太顺利,根本原因在于即不了解前端开发,更谈不上喜欢前端开发。很早以前,有一个做房产中介的哥们,要转前端开发。我只是拿他举个例子啊,他觉得中介没发展,我问他为啥要转前端呢?他说在北京前端挣的多。他喜欢js吗?他喜欢前端开发吗?他只是听说前端工资高,然后来了,然后又走了。就像处对象一样,第一没有感情基础;第二没有一见钟情,走不远的。2,前端开发是一种人生标签。不管你愿意不愿意,别人都会根据这个来给你分类。工作技能有很多种,厨师,销售,司机。。等,这其中也包括前端开发。它是一种实用技能,但又不止于此。在我看来,它更是一种人生标签,你是“做什么”的。你在具体“做什么”这个方向有专长,你就在此方向有话语权。你说出来的话,就有人认真听。例如,我的web零基础前端课程,别人凭什么听我的信我的?因为我在此方向上,拥有一定的话语权。3,学习前端,学习js,要乐于获取不断的小满足。这句话怎么理解呢?我个人每学会一个知识点,每搞明白一个小问题,都会在那一时刻获得一种很开心很满足的快感。虽然持续时间很短,但这种快感让我很着迷。

  • 【JDBC实战】 水果库存系统[功能实现②] 功能完善+使用效果

    CSDN话题挑战赛第2期 参赛话题:学习笔记JDBC专栏(点击进入专栏) 【1】idea添加mysql-jar包 【2】使用IDEA连接数据库,执行增删改操作。 【3】IDEA连接数据库,执行查询操作,返回结果集并输出。 【4】JDBC实战水果库存系统[设计阶段] 【5】水果库存系统[功能实现①](接口实现类FruitDAOImpl) 【6】水果库存系统[功能实现②]功能完善+使用效果 【7】水果库存系统[代码优化] 【8】连接数据库,执行批处理操作。 【9】数据库连接池:德鲁伊druid的使用JDBC实战,实现水果库存系统JDBC专栏一、前言二、Menu类功能实现1.主菜单显示showMainMenu()2.查看水果库存列表showFruitList()3.添加水果库存信息addFruit()4.查看特定水果库存信息showFruitInfo()5.水果下架delFruit()6.退出exit()7.Menu类代码汇总三、客户类Client四、总结一、前言在上一篇文章中,我们实现了FruitDAO接口,在接口实现类FruitDAOImpl中完成了五个单精度方法的功能代码实现。 实际上

  • 最大似然估计和最大后验概率

    参考链接1 参考链接2 一、介绍   极大似然估计和贝叶斯估计分别代表了频率派和贝叶斯派的观点。频率派认为,参数是客观存在的,只是未知而矣。因此,频率派最关心极大似然函数,只要参数求出来了,给定自变量X,Y也就固定了,极大似然估计如下所示:   D表示训练数据集,是模型参数   相反的,贝叶斯派认为参数也是随机的,和一般随机变量没有本质区别,正是因为参数不能固定,当给定一个输入x后,我们不能用一个确定的y表示输出结果,必须用一个概率的方式表达出来,所以贝叶斯学派的预测值是一个期望值,如下所示:   其中x表示输入,y表示输出,D表示训练数据集,是模型参数   该公式称为全贝叶斯预测。现在的问题是如何求(后验概率),根据贝叶斯公式我们有:   可惜的是,上面的后验概率通常是很难计算的,因为要对所有的参数进行积分,不能找到一个典型的闭合解(解析解)。在这种情况下,我们采用了一种近似的方法求后验概率,这就是最大后验概率。   最大后验概率和极大似然估计很像,只是多了一项先验分布,它体现了贝叶斯认为参数也是随机变量的观点,在实际运算中通常通过超参数给出先验分布。   从以上可以看出,一方

  • 线程池深入(li)

      java线程池。在jdk5之后为我们提供了线程池,只需要使用API,不用去考虑线程池里特殊的处理机制。jdk5线程池分好多种,固定尺寸的线程池、可变尺寸连接池等。常用的是ThreadPoolExecutor,它的构造方法如下: publicThreadPoolExecutor(intcorePoolSize, intmaximumPoolSize, longkeepAliveTime, TimeUnitunit, BlockingQueue<Runnable>workQueue, RejectedExecutionHandlerhandler){ this(corePoolSize,maximumPoolSize,keepAliveTime,unit,workQueue, Executors.defaultThreadFactory(),handler); }复制   参数说明:   1.corePoolSize:线程池维护线程的最少数量,有可能是空闲的线程。   2.maximunPoolSize:线程池维护线程的最大数量。   3.keepAliveTime:线

  • 点击Cell中的按钮时,如何取所在的Cell

    4.点击Cell中的按钮时,如何取所在的Cell:-(void)OnTouchBtnInCell:(UIButton*)Btu{CGPointpoint=btn.center;point=[tableconvertPoint:pointfromView:btn.superview];NSIndexPath*indexpath=[tableindexPathForRowAtPoint:point];UITableViewCell*cell=[tablecellForRowAtIndexPath:indexpath];...

  • H5_Day3

    一、transform变换 概述:在HTML5中,可以实现元素的2D、3D变换 主要可以实现:缩放比例【scale】、平移【translate】、旋转【rotate】 1.1、2D变换动画 如果写了多个transform样式,则后面写的transform覆盖前面的,即只有最后一个起作用。 1.1.1缩放【scale】 <style> *{ margin:0; padding:0; } div{ width:200px; height:200px; margin:100pxauto; background:url(../images/3.png)no-repeat; border:2pxdashedblack; /*transform的缩放属性————scale()*/ /*里面放一个数字时表示元素的宽高按比例缩放N倍。负值就让图片倒过来*/ transform:scale(1.5); } </style> 复制   /*里面放两个参数:第一个参数表示宽是原来的多少倍,第二个参数表示高是原来的多少倍*/ transform:scale(2,1);

  • 将VSCode添加到右键

    https://www.cnblogs.com/Rexcnblog/p/8046371.html https://www.jianshu.com/p/b49002fa10a7 @echoOff :START CLS echo========================================================================= echo*注意:该bat文件必须和VSCode.exe在同级目录* echo*[A]添加右键菜单* echo*[D]删除右键菜单* echo*[Q]退出* echo** echo*爱前端:www.iqianduan.cn* echo========================================================================= Set/PChoice=       请选择要进行的操作(A/D/Q),然后按回车: If/I“%Choice%”==”A”Goto:ADD If/I“%Choice%”==”D”Goto:DEL If/I“%Choice%”==”Q”Exit

  • 自己写的一个分页函数,可以使用

    <?php /** *DEMO10 *功能:分页 *author:wenzl *分页中心方法DEMO *功能智能提供数字分页 *$page当前页码 *$pageSize每页数据条数 *$dataTotal数据总数 *|$number设置可视分页项数 *|[1][2][3][4][5][6] */ functiongetPage($page=1,$pageSize=5,$dataTotal=100,$number=5){ $pageCnt=ceil($dataTotal/$pageSize);//总页数 $groupCnt=ceil($pageCnt/$number); $k=1; $pageTemp=array(); for($i=1;$i<=$groupCnt;$i++){ if($i==1){ for($j=1;$j<=$number+1;$j++){ $k<=$pageCnt&& $pageTemp[$i][$j]=$k++; } $k--; }else{ for($j=1;$j

  • 11.10的一套题

    注:所有题目的时间限制均为1s,内存限制均为256MB。1.第K小数 (number.cpp/c/pas) 【问题描述】 有两个正整数数列,元素个数分别为N和M。从两个数列中分别任取一个数 相乘,这样一共可以得到N*M个数,询问这N*M个数中第K小数是多少。 【输入格式】 输入文件名为number.in。 输入文件包含三行。 第一行为三个正整数N,M和K。 第二行为N个正整数,表示第一个数列。 第三行为M个正整数,表述第二个数列。 【输出格式】 输出文件名为number.out。 输出文件包含一行,一个正整数表示第K小数。 【输入输出样例1】 number.in 234 12 213   number.out  3 【输入输出样例2】 number.in 5518 72358 31325   number.out  16 【数据规模与约定】 /* 二分答案 */ #include<iostream> #include<cstdio> #include<cstring> #i

  • OC处理可变参数的方法

    Objective-C处理可变参数 va_list 这是一个类型,用于定义指向可变参数列表的指针变量 va_start 这是一个函数,指定开始处理可变形参的列表,并让指针变量指向可变形参的第一个参数 va_end 结束处理可变形参,并释放指针 va_arg 该函数返回指针变量当前指向的参数的值,并让指针变量指向下一个参数   -(void)testMultiple:(NSString*)name...{ //定义va_list变量(指针) va_listarg_list; if(name){ //把arg_list指向name这个可变形参的第一个位置 va_start(arg_list,name); //提取一个参数,返回一个NSString*,并将指针后移 NSString*temp_arg=va_arg(arg_list,id); while(temp_arg){ NSLog(@"%@",temp_arg); //继续后移,遇到nil跳出循环 temp_arg=va_arg(arg_list,id); } va_end(arg_list); }

相关推荐

推荐阅读