浅谈 Linux软链接和Linux 命令别名

先说下为什么会研究这个,简而言之就是故事背景:
在Linux上部署项目、查看日志是一个程序员必有得基本素质,但是有一天我遇到了这么几条命令:

cdlog;cdbin;cdtomcat;

就有点晕,为什么cd和目录之间不加空格,而且当前目录并不是log/bin/tomcat的父目录为什么就能进得去,于是就开始了漫漫的探索之路。首先我去问了下关系比较好的小菜鸡同事,小菜鸡告诉我,这是Linux软连接,就是加上软连接就可以。于是我开始研究Linux链接。
Linux链接简介:
链接只是相当于给文件添加了另一条索引目录,Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情况下,ln命令产生硬链接。
1、硬链接(Hard Link)
我们可以把硬链接想象成为“复制”虽然他并没有复制这个文件。我们都知道Linux中一切皆文件的说法,在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。所谓硬链接,就是给这个文件起了另外一个名字,但是编号依然指向同一个节点号。建立硬链接有什么好处呢,除方便外,他还有防止“误删”的作用。意思是,只要文件的索引节点号上有一个及以上的硬链接时,该文件就不会删除(文件的数据块和目录连接不被释放)。硬链接说白了是一个指针,指向文件索引节点,系统并不为它重新分配inode。
2、软链接(Symbolic Link)
软链接,又称符号连接,与硬链接不同的是,软链接不链向索引节点号,而是链向目录。相当于Windows中的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。
3、举例
说了半天大家可能也没绕明白,什么索引节点号什么目录的。我举个生活中的例子,一个编号为100001的机器人,有两个身份,分别是杀手杰克和医生杰斯(硬链接)。他在杀手界,混了一个冷血杀手的外号(软连接),如果哪天我需要找杀手帮我搞定一个人,我去搜索“冷血杀手”,就会得到杰克。而我要找杰斯的话,找到的是编号100001这个人,突然机器人不想当杀手了(误删),于是,搜索冷血杀手,就找不到这个人(杰克)了(软连接失效),但是10001还是存在的,我找杰斯还是可以找得到的。换成代码再来说一遍:

[root@Simon ~]# cd testdir/
[root@Simon testdir]# mkdir dir1
[root@Simon testdir]# cd dir1/
[root@Simon dir1]# mkdir dir2
[root@Simon dir1]# cd dir2/
[root@Simon dir2]# echo this is File 1 >> file1     --在dir2中建立file1(机器人,杀手叫杰克)
[root@Simon dir2]# ls -li                           --注意他的索引节点号是 405968(编号)
总用量 4
405968 -rw-r--r-- 2 root root 15 24 16:40 file1 
[root@Simon dir2]# cat file1
this is File 1
[root@Simon dir2]# cd ../../
[root@Simon testdir]# ln dir1/dir2/file1 hard        --建立硬链接(医生叫杰斯)
[root@Simon testdir]# ln -s dir1/dir2/file1 symbolic --建立软链接(杰克外号冷血杀手)
[root@Simon testdir]# cat hard                       --验证硬链接
this is File 1
[root@Simon testdir]# cat symbolic                   --验证软链接
this is File 1
[root@Simon testdir]# ll -i                          --发现了没,硬链接的索引节点号也是405968(编号一致)
总用量 8
416182 drwxr-xr-x 3 root root 4096 24 16:35 dir1
405968 -rw-r--r-- 2 root root   15 24 16:40 hard 
394460 lrwxrwxrwx 1 root root   15 24 16:48 symbolic -> dir1/dir2/file1

这时候我们更改一下hard会发生什么

[root@Simon testdir]# echo hard change it >> hard     --更改hard(医生学会技能)
[root@Simon testdir]# cat hard                        --hard已改变
this is File 1
hard change it
[root@Simon testdir]# cat symbolic                    --软连接也改变证明file1也已改变(冷血杀手即杰克也学会)
this is File 1
hard change it

这时候我们把原来的文件file1删掉会发生什么呢?

[root@Simon testdir]# rm -rf dir1/dir2/file1          --删除文件(不做杀手了)
[root@Simon testdir]# cat hard                        --硬链接没有变化(还可以找到医生)
this is File 1                                       
[root@Simon testdir]# cat symbolic                    --软连接失效(找不到冷血杀手了)
cat: symbolic: 没有那个文件或目录                          

到这相信大家也明白了Linux连接了。在下发现一篇不错的博文,推荐给大家,希望大家喜欢(快点我)

但是问题来了,搞了这一大通还是没解决我的问题,链接倒是可以实现非父目录直接访问,但是之间没空格依然是报错。于是我就找到了公司大神,大神跟我讲这不是链接,跟链接半毛钱关系都没有,这叫命令别名。得,白忙活。下面就说说这别名:
别名,其实就是给一个较长的命令起一个比较简便的名字,在下次想调用这长串命令时,直接敲入别名而不需要全部输入命令。例如,如果要进入一个目录很长的文件夹 cd testdir/dir1/dir2/dir3/dir4/,每次输入太麻烦,我们就给他起个别名叫cddir。下次直接敲入cddir就可以进入到dir4中,岂不妙哉。怎么操作呢,如下:
格式:# alias name=’command line’

[root@Simon ~]# alias cddir='cd ~/testdir/dir1/dir2/dir3/dir4' --给命令起别名
[root@Simon ~]# cddir                                          --直接敲入别名
[root@Simon dir4]# pwd
/root/testdir/dir1/dir2/dir3/dir4                              --显示当前目录正确

于是终于搞懂,写此文章纪念总结一下。
本文全部出自手敲,欢迎交流,不喜勿喷。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值