今天,查看服务器资源的时候,发现服务器上有一个挂在盘满了,可用磁盘为0。按照以往操作,先找找看哪些文件比较占用磁盘空间,将一些无用的文件删除,释放磁盘空间。不幸的是,最占资源的竟然是mysql数据库。这就尴尬了,数据库的数据可不能随便乱删。再看了一眼,挂载盘空间,发现某个挂载盘空间比较充足。瞬间,计上心头——利用ln命令,创建链接。

ln命令的功能是为某一个文件在另外一个位置建立一个同步的链接。

软链接 与 硬链接 的异同

软链接可以跨文件系统 ,硬链接不可以
[root@localhost test_ln]# df -lh
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2        18G   12G  5.2G  70% /
tmpfs           931M  224K  931M   1% /dev/shm
/dev/sda1       291M   39M  238M  14% /boot
[root@localhost test_ln]# cd /
[root@localhost /]# touch ln.txt
[root@localhost /]# ln -s /ln.txt /boot/ln_1.txt
[root@localhost /]# ls -l /boot/ln_1.txt
lrwxrwxrwx. 1 root root 7 May  9 23:58 /boot/ln_1.txt -> /ln.txt
[root@localhost /]# ln -d /ln.txt /boot/ln_2.txt
ln: creating hard link `/boot/ln_2.txt' => `/ln.txt': Invalid cross-device link

上述代码中,在文件系统/dev/sda2创建了一个ln.txt文件,想要创建链接到文件系统/dev/sda1中,发现使用ln -s /ln.txt /boot/ln_1.txt可以创建软连接成功,而不能使用ln -d /ln.txt /boot/ln_2.txt创建硬链接成功。但是可以在同一系统中,创建硬链接成功,如下:

[root@localhost /]# ls -l /ln_2.txt
ls: cannot access /ln_2.txt: No such file or directory
[root@localhost /]# ln -d /ln.txt /ln_2.txt
[root@localhost /]# ls -l /ln_2.txt
-rw-r--r--. 2 root root 0 May  9 23:57 /ln_2.txt
软链接可以对一个不存在的文件名进行链接,而硬链接不允许
[root@localhost /]# ls -l /ln2019.txt
ls: cannot access /ln2019.txt: No such file or directory
[root@localhost /]# ln -s /ln2019.txt ln2019-2.txt
[root@localhost /]# ln -d /ln2019.txt ln2019-3.txt
ln: accessing `/ln2019.txt': No such file or directory

如上,给不存在的文件/ln2019.txt创建软链接是可以成功,而硬链接不行。

软链接可以对目录进行链接,而硬链接不可以
[root@localhost /]# ls -l ln2019
ls: cannot access ln2019: No such file or directory
[root@localhost /]# mkdri ln2019
bash: mkdri: command not found
[root@localhost /]# mkdir ln2019
[root@localhost /]# ls -l /ln2019
total 0
[root@localhost /]# ln -s /ln2019 /2019-2
[root@localhost /]# ll -l /2019-2
lrwxrwxrwx. 1 root root 7 May 10 00:07 /2019-2 -> /ln2019
[root@localhost /]# ln -d /ln2019 /ln2019-3
ln: creating hard link `/ln2019-3' => `/ln2019': Operation not permitted

如上,软链接可以给目录创建,但是硬链接不允许。

软链接与硬链接的占用磁盘空间情况

软链接,相当于创建了一个快捷方式;而硬链接,以文件副本的形式存在,但不占用实际空间。
通俗的说,软链接,链接源文件没有了,链接文件相当于找不到家了,无法正常使用;而硬链接由于是以副本形式存在,链接源文件没有了,仍旧可以正常使用。

[root@localhost test_ln]# du -h --max-depth=1
6.2G    .
[root@localhost test_ln]# ls -lh ping.log
-rw-r--r--. 1 root root 3.4G May 10 02:00 ping.log
[root@localhost test_ln]# ln -s ping.log ping22.log
[root@localhost test_ln]# ln -d ping.log ping23.log
[root@localhost test_ln]# ls -lh ping*
lrwxrwxrwx. 1 root root    8 May 10 02:03 ping22.log -> ping.log
-rw-r--r--. 2 root root 3.4G May 10 02:00 ping23.log
-rw-r--r--. 2 root root 3.4G May 10 02:00 ping.log
-rw-r--r--. 1 root root 2.9G May 10 02:00 ping_tmp.log
[root@localhost test_ln]# du -h --max-depth=1
6.2G    .
[root@localhost test_ln]# head -n 5 ping.log ping22.log ping23.log
==> ping.log <==
PING 192.168.153.1 (192.168.153.1) 56(84) bytes of data.
64 bytes from 192.168.153.1: icmp_seq=1 ttl=128 time=0.395 ms
64 bytes from 192.168.153.1: icmp_seq=2 ttl=128 time=0.329 ms
64 bytes from 192.168.153.1: icmp_seq=3 ttl=128 time=0.253 ms
64 bytes from 192.168.153.1: icmp_seq=4 ttl=128 time=0.271 ms==> ping22.log <==
PING 192.168.153.1 (192.168.153.1) 56(84) bytes of data.
64 bytes from 192.168.153.1: icmp_seq=1 ttl=128 time=0.395 ms
64 bytes from 192.168.153.1: icmp_seq=2 ttl=128 time=0.329 ms
64 bytes from 192.168.153.1: icmp_seq=3 ttl=128 time=0.253 ms
64 bytes from 192.168.153.1: icmp_seq=4 ttl=128 time=0.271 ms==> ping23.log <==
PING 192.168.153.1 (192.168.153.1) 56(84) bytes of data.
64 bytes from 192.168.153.1: icmp_seq=1 ttl=128 time=0.395 ms
64 bytes from 192.168.153.1: icmp_seq=2 ttl=128 time=0.329 ms
64 bytes from 192.168.153.1: icmp_seq=3 ttl=128 time=0.253 ms
64 bytes from 192.168.153.1: icmp_seq=4 ttl=128 time=0.271 ms
[root@localhost test_ln]# rm -f ping.log
[root@localhost test_ln]# du -h --max-depth=1
6.2G    .
[root@localhost test_ln]# rm -f ping22.log
[root@localhost test_ln]# du -h --max-depth=1
6.2G    .
[root@localhost test_ln]# rm -f ping23.log
[root@localhost test_ln]# du -h --max-depth=1
2.9G    .

如上,找了一个3.4G大小的文件ping.log,分别创建了软链接文件ping22.log与硬链接文件ping23.log。通过du -h --max-depth=1命令,查看当前目录占用空间,发现并没有增加空间占用,说明软链接与硬链接都不占用空间(可能不准确,至少从感知上是这样)。接着开始删除文件,先删除源文件ping.log,发现删除后,磁盘占用空间不变。接着删除软链接文件ping22.log,磁盘占用空间不变。最后删除硬链接文件ping23.log,发现磁盘占用空间少了近3.3G。可以推断,当软链接源文件删除后,软链接的快捷方式也就失效,磁盘空间释放。但是当硬链接源文件删除后,磁盘空间占用并不会释放,必须源文件与硬链接文件都删除后,才会释放磁盘空间。

源文件删除
[root@localhost test_ln]# echo "ping.log" > ping.log
[root@localhost test_ln]# ln -s ping.log ping30.log
[root@localhost test_ln]# ln -d ping.log ping31.log
[root@localhost test_ln]# tail ping.log ping30.log ping31.log
tail: inotify cannot be used, reverting to polling
==> ping.log <==
ping.log==> ping30.log <==
ping.log==> ping31.log <==
ping.log
[root@localhost test_ln]# rm -f ping.log
[root@localhost test_ln]# tail ping.log ping30.log ping31.log
tail: inotify cannot be used, reverting to polling
tail: cannot open `ping.log' for reading: No such file or directory
tail: cannot open `ping30.log' for reading: No such file or directory
==> ping31.log <==
ping.log
[root@localhost test_ln]# echo "rewrite to ping.log" > ping.log
[root@localhost test_ln]# tail ping.log ping30.log ping31.log
tail: inotify cannot be used, reverting to polling
==> ping.log <==
rewrite to ping.log==> ping30.log <==
rewrite to ping.log==> ping31.log <==
ping.log

重新创建被删除的源文件ping.log,软链接文件ping30.log恢复链接,且数据同步,链接依旧有效。而硬链接文件ping31.log,则还是之前数据,与最初建立源文件的ping.log数据内容不一致。也就是说,硬链接会在源文件删除后,链接会失效。

源文件移动至其它目录
[root@localhost test_ln]# mv temp/ping.log .
[root@localhost test_ln]# echo "move ping.log back. " >> ping.log
[root@localhost test_ln]# head ping.log
ping.log
move ping.log back.
[root@localhost test_ln]# tail ping5.log ping6.log
tail: inotify cannot be used, reverting to polling
==> ping5.log <==
ping.log
move ping.log back. ==> ping6.log <==
ping.log
move ping.log back.

被移动的源文件,重新移动至原来的目录,软链接与硬链接可以正常读取数据,并且数据是同步的。说明,源文件被移动后,链接关系可在文件移动回来后恢复。但是软链接不能读取,硬链接是可以。既然如此,那么文件被移动后,硬链接是不是一直有效呢?

[root@localhost test_ln]# echo "ping.log" > ping.log
[root@localhost test_ln]# ln -d ping.log ping8.log
[root@localhost test_ln]# mv ping.log temp/
[root@localhost test_ln]# head ping8.log
ping.log
[root@localhost test_ln]# echo "ping.log move to temp directory" >> temp/ping.log
[root@localhost test_ln]# tail temp/ping.log ping8.log
==> temp/ping.log <==
ping.log
ping.log move to temp directory==> ping8.log <==
ping.log
ping.log move to temp directory

事实证明:软链接与硬链接的源文件被移动后,链接并没有失效。此时,软链接由于是一个“快捷方式”,找不到文件而无法正常使用,而硬链接是有一个副本,源文件并没有丢失,仍可正常使用,并且数据正常同步。当文件移回原目录时,软链接与硬链接都正常。

源文件重命名
[root@localhost test_ln]# echo "ping.log" > ping.log
[root@localhost test_ln]# ln -s ping.log ping20.log
[root@localhost test_ln]# ln -d ping.log ping21.log
[root@localhost test_ln]# tail ping.log ping20.log ping21.log
tail: inotify cannot be used, reverting to polling
==> ping.log <==
ping.log==> ping20.log <==
ping.log==> ping21.log <==
ping.log
[root@localhost test_ln]# mv ping.log ping_new.log
[root@localhost test_ln]# tail ping_new.log ping20.log ping21.log
tail: inotify cannot be used, reverting to polling
==> ping_new.log <==
ping.log
tail: cannot open `ping20.log' for reading: No such file or directory==> ping21.log <==
ping.log
[root@localhost test_ln]# echo "ping.log rename to ping_new.log">>ping_new.log
[root@localhost test_ln]# tail ping_new.log ping20.log ping21.log
tail: inotify cannot be used, reverting to polling
==> ping_new.log <==
ping.log
ping.log rename to ping_new.log
tail: cannot open `ping20.log' for reading: No such file or directory==> ping21.log <==
ping.log
ping.log rename to ping_new.log[root@localhost test_ln]# mv ping_new.log ping.log
[root@localhost test_ln]# tail ping_new.log ping20.log ping21.log
tail: inotify cannot be used, reverting to polling
tail: cannot open `ping_new.log' for reading: No such file or directory
==> ping20.log <==
ping.log
ping.log rename to ping_new.log==> ping21.log <==
ping.log
ping.log rename to ping_new.log
[root@localhost test_ln]# echo "rename back" >> ping.log
[root@localhost test_ln]# tail ping_new.log ping20.log ping21.log
tail: inotify cannot be used, reverting to polling
tail: cannot open `ping_new.log' for reading: No such file or directory
==> ping20.log <==
ping.log
ping.log rename to ping_new.log
rename back==> ping21.log <==
ping.log
ping.log rename to ping_new.log
rename back

如上,软链接文件ping20.log,硬链接文件ping21.log文件的源文件为ping.log。当重命名源文件为ping_new.log后,软链接文件不能正常读取数据,但是硬链接文件可以正常使用,并且数据保持同步。当重命名文件改成源文件名后,软链接与硬链接都有效,且数据保持同步。

linux ln命令详解相关推荐

  1. Linux ln命令详解及使用

    Linux ln命令详解及使用 ln是linux中一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个不同的链接,这个命令最常用的参数是-s,具体用法是:ln –s 源文件 目标文件. 1. ...

  2. linux ln -sv命令,linux ln 命令详解

    这是linux中一个非常重要命令,请大家一定要熟悉.它的功能是为某一个文件在另外一个位置建立一个同不的链接,这个命令最常用的参数是-s,具体用法是:ln -s 源文件 目标文件. 当我们需要在不同的目 ...

  3. ln -s命令 linux,linux ln命令详解

    软链接 首先,我在我的target目录下创建了文件lovedog.txt,并写了一行文字,如下图: 接着,我在target的父目录shelltest中创建一个指向lovedog.txt的符号链接,即软 ...

  4. Linux常用命令详解(两万字超长文)

    Linux常用命令详解 作为一枚程序员,熟练掌握一些常见的linux命令是很有必要的,掌握这些命令能帮助我们更好地管理Linux系统,提高工作效率,并有效地解决各种问题,为了方便自己后续查阅以及帮助不 ...

  5. 服务器维护详解,服务器维护Linux tr 命令详解

    服务器维护Linux tr 命令详解 tr 是 Linux 和 Unix 系统中的命令行实用程序,用于转换,删除和挤压标准输入中的字符,并将结果写入标准输出. 该 tr 命令通常通过管道与其他命令结合 ...

  6. Linux常用命令详解(最全)

    Linux命令目录 Linux命令集合 系统信息 关机 (系统的关机.重启以及登出 ) 文件和目录 文件搜索 挂载一个文件系统 磁盘空间 用户和群组 文件的权限 - 使用 "+" ...

  7. linux mingetty 命令详解

    linux mingetty 命令详解 功能说明:精简版的getty. 语 法:mingetty [--long-hostname][--noclear][tty] 补充说明:mingetty适用于本 ...

  8. linux zip 命令详解

    功能说明:压缩文件.  语 法:zip [-AcdDfFghjJKlLmoqrSTuvVwXyz$][-b <工作目录>][-ll][-n <字尾字符串>][-t <日期 ...

  9. linux zipinfo 命令详解

    linux zipinfo 命令详解 功能说明:列出压缩文件信息. 语 法:zipinfo [-12hlmMstTvz][压缩文件][文件...][-x <范本样式>] 补充说明:执行zi ...

最新文章

  1. 什么?程序员还要了解经济学?!
  2. python读文件操作-python 之文件操作
  3. php use,php use和include区别总结
  4. Daily scrum[2013.12.07]
  5. 数学--数论--HDU - 6322 打表找规律
  6. 简明扼要的反射入门教程
  7. 测试使用navicat工具将MySQL格式SQL文件导入到MogDB数据库
  8. textarea中插入标签_HTMLCSS学习笔记(二)-- HTML表单标签
  9. android tablet gps antenna,A Novel Tri-band GPS/WLAN Antenna for Tablet with Full Metal Housing
  10. 嵌入式电路设计(符号库和封装库)
  11. 自学网html视频教程,ps教程自学网html视频教程
  12. 《Redis开发与运维》笔记
  13. Qt天气助手小程序(QCutomPlot绘图)
  14. 微信用户扫码登录和登录退出的业务逻辑实现(java版)
  15. 忠实履行职责,成就辉煌人生 ——读《西点军校的经典法则》有感
  16. android辅助点击软件吗,自动点击器安卓7.0版本粒可辛点击上线了
  17. Java语言 Timer 定时器的四种使用方式
  18. 关于曼哈顿距离下的最小生成树
  19. 【算法思路】常见岛屿数量的算法题
  20. 消失的中国互联网元老陈天桥:为神经科学捐助10亿,不担心机器人崛起

热门文章

  1. 电脑重装系统,微信备份与恢复聊天记录,保存的文件。微信聊天记录迁移
  2. linux 查看用户访问ip,(总结)按时按登录IP记录Linux所有用户操作日志的方法(附脚本)...
  3. 租车信息系统数据库设计(1)
  4. 数字创意产业定义与研究范围
  5. BootStrap详细应用-小bai前端框架进阶秘籍
  6. 大模型自己跳过“无用”层,推理速度×3,谷歌MIT这个新方法火啦!
  7. oracle 配置变更记录,Oracle安装、配置和.NET访问的简单记录
  8. 计算机无法超过人类智慧,计算机的智力会超过人类吗?
  9. 计算机网络五要素,网络安全五个基本要素是什么
  10. ambari 修改服务器名,ambari - Ambari无法运行用于修改用户配置单元的自定义钩子 - 堆栈内存溢出...