linux ln命令详解
今天,查看服务器资源的时候,发现服务器上有一个挂在盘满了,可用磁盘为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命令详解相关推荐
- Linux ln命令详解及使用
Linux ln命令详解及使用 ln是linux中一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个不同的链接,这个命令最常用的参数是-s,具体用法是:ln –s 源文件 目标文件. 1. ...
- linux ln -sv命令,linux ln 命令详解
这是linux中一个非常重要命令,请大家一定要熟悉.它的功能是为某一个文件在另外一个位置建立一个同不的链接,这个命令最常用的参数是-s,具体用法是:ln -s 源文件 目标文件. 当我们需要在不同的目 ...
- ln -s命令 linux,linux ln命令详解
软链接 首先,我在我的target目录下创建了文件lovedog.txt,并写了一行文字,如下图: 接着,我在target的父目录shelltest中创建一个指向lovedog.txt的符号链接,即软 ...
- Linux常用命令详解(两万字超长文)
Linux常用命令详解 作为一枚程序员,熟练掌握一些常见的linux命令是很有必要的,掌握这些命令能帮助我们更好地管理Linux系统,提高工作效率,并有效地解决各种问题,为了方便自己后续查阅以及帮助不 ...
- 服务器维护详解,服务器维护Linux tr 命令详解
服务器维护Linux tr 命令详解 tr 是 Linux 和 Unix 系统中的命令行实用程序,用于转换,删除和挤压标准输入中的字符,并将结果写入标准输出. 该 tr 命令通常通过管道与其他命令结合 ...
- Linux常用命令详解(最全)
Linux命令目录 Linux命令集合 系统信息 关机 (系统的关机.重启以及登出 ) 文件和目录 文件搜索 挂载一个文件系统 磁盘空间 用户和群组 文件的权限 - 使用 "+" ...
- linux mingetty 命令详解
linux mingetty 命令详解 功能说明:精简版的getty. 语 法:mingetty [--long-hostname][--noclear][tty] 补充说明:mingetty适用于本 ...
- linux zip 命令详解
功能说明:压缩文件. 语 法:zip [-AcdDfFghjJKlLmoqrSTuvVwXyz$][-b <工作目录>][-ll][-n <字尾字符串>][-t <日期 ...
- linux zipinfo 命令详解
linux zipinfo 命令详解 功能说明:列出压缩文件信息. 语 法:zipinfo [-12hlmMstTvz][压缩文件][文件...][-x <范本样式>] 补充说明:执行zi ...
最新文章
- 什么?程序员还要了解经济学?!
- python读文件操作-python 之文件操作
- php use,php use和include区别总结
- Daily scrum[2013.12.07]
- 数学--数论--HDU - 6322 打表找规律
- 简明扼要的反射入门教程
- 测试使用navicat工具将MySQL格式SQL文件导入到MogDB数据库
- textarea中插入标签_HTMLCSS学习笔记(二)-- HTML表单标签
- android tablet gps antenna,A Novel Tri-band GPS/WLAN Antenna for Tablet with Full Metal Housing
- 嵌入式电路设计(符号库和封装库)
- 自学网html视频教程,ps教程自学网html视频教程
- 《Redis开发与运维》笔记
- Qt天气助手小程序(QCutomPlot绘图)
- 微信用户扫码登录和登录退出的业务逻辑实现(java版)
- 忠实履行职责,成就辉煌人生 ——读《西点军校的经典法则》有感
- android辅助点击软件吗,自动点击器安卓7.0版本粒可辛点击上线了
- Java语言 Timer 定时器的四种使用方式
- 关于曼哈顿距离下的最小生成树
- 【算法思路】常见岛屿数量的算法题
- 消失的中国互联网元老陈天桥:为神经科学捐助10亿,不担心机器人崛起
热门文章
- 电脑重装系统,微信备份与恢复聊天记录,保存的文件。微信聊天记录迁移
- linux 查看用户访问ip,(总结)按时按登录IP记录Linux所有用户操作日志的方法(附脚本)...
- 租车信息系统数据库设计(1)
- 数字创意产业定义与研究范围
- BootStrap详细应用-小bai前端框架进阶秘籍
- 大模型自己跳过“无用”层,推理速度×3,谷歌MIT这个新方法火啦!
- oracle 配置变更记录,Oracle安装、配置和.NET访问的简单记录
- 计算机无法超过人类智慧,计算机的智力会超过人类吗?
- 计算机网络五要素,网络安全五个基本要素是什么
- ambari 修改服务器名,ambari - Ambari无法运行用于修改用户配置单元的自定义钩子 - 堆栈内存溢出...