文章详情页 您现在的位置是:网站首页>文章详情
Linux软连接和硬链接
Jeyrce.Lu 发表于:2020年6月18日 21:23 分类:【服务器】 2285次阅读
一切皆文件
Linux系统中,一切都是文件,为了区分文件呢,我们通常又将文件分为几种类型:
- 普通文件
- 目录文件
- 链接文件
- 设备文件
jeeyshe@jeeyshe-PC:~/Downloads$ ll 总用量 132M 3148681 drwxr-xr-x 2 jeeyshe jeeyshe 4.0K 6月 16 19:20 Baidu 2105113 -rw-r--r-- 1 jeeyshe jeeyshe 58K 6月 16 22:28 difference-between-RAID-mod.png 2098390 -rw-r--r-- 1 jeeyshe jeeyshe 118M 6月 10 13:11 go1.14.4.linux-amd64.tar.gz 2121975 lrwxrwxrwx 1 jeeyshe jeeyshe 13 6月 18 21:03 ping -> /usr/bin/ping 2118832 -rw-r--r-- 1 jeeyshe jeeyshe 23K 6月 16 22:42 RAID-6.jpeg 2116558 -rw-r--r-- 1 jeeyshe jeeyshe 13M 6月 16 19:26 鸟哥的Linux私房菜.pdf jeeyshe@jeeyshe-PC:~/Downloads$ ll /dev |grep sd 347 brw-rw---- 1 root disk 8, 0 6月 18 20:08 sda 351 brw-rw---- 1 root disk 8, 1 6月 18 20:08 sda1 352 brw-rw---- 1 root disk 8, 2 6月 18 20:08 sda2
其中普通文件如上图的.txt、.log、.gz等等,当然普通文件也可以没有后缀名,后缀名只是方便肉眼识别文件类型的作用(比如你完全可以将一个文本文件命名为xxx.mp3)。目录文件如上图Baidu文件夹,可以看到他的文件类型是d。链接文件如ping,我将它连接到了/usr/bin/ping 命令,他的文件类型是l。设备文件如我们的/dev下的设备(磁盘),分区等。
文件描述符
上一篇Linux文件系统工作原理中我们介绍了inode索引节点,inode和所有文件一一对应,记录文件的元数据和位置。文件描述符(file descriptor)则是内核为了高效管理被打开的文件,为文件创建的索引,他本质是一个小正整数(通常是1024以内)。所有I/O操作都通过这个文件描述符来进行系统调用,例如我们可以使用python打开一个文件然后查看他的文件描述符:
(python3) jeeyshe@jeeyshe-PC:~$ ipython Python 3.8.3 (default, Jun 10 2020, 14:02:08) Type 'copyright', 'credits' or 'license' for more information IPython 7.15.0 -- An enhanced Interactive Python. Type '?' for help. In [1]: f = open("java_error_in_GOLAND_9515.log", "rb") In [2]: f Out[2]: <_io.BufferedReader name='java_error_in_GOLAND_9515.log'> In [3]: f.fileno() Out[3]: 12
此处顺便说一下三个特殊的文件描述符:
文件描述符 | 名称 | 符号常量 | 文件流 |
0 | 标准输入 | STDIN_FILENO | stdin |
1 | 标准输出 | STDOUT_FILENO | stdout |
2 | 标准错误 | STDERR_FILENO | stderr |
腾讯云服务器会跑一个云盾服务,查看他的定时任务你可以看到:
[root@VM_0_16_centos ~]# crontab -l */1 * * * * /usr/local/qcloud/stargate/admin/start.sh > /dev/null 2>&1 & 0 0 * * * /usr/local/qcloud/YunJing/YDCrontab.sh > /dev/null 2>&1 &
此处 2>&1 的写法意思就是将标准错误重定向到输出,注意此处如果写的是 2 > 1 则是将标准错误重定向到一个名为1的文件,&1才是重定向到标准输出。
软链接和硬链接
我们经常为操作系统建立软链接,最为常见的是为一些命令创建软链接到/usr/bin或者/usr/local/bin下面。
jeeyshe@jeeyshe-PC:~/Downloads$ ls -l /usr/bin/ |grep x86_64-linux-gnu-gcc -rwxr-xr-x 1 root root 27168 6月 10 04:32 x86_64-linux-gnu-gcc-nm-6 lrwxrwxrwx 1 root root 12 6月 10 04:32 x86_64-linux-gnu-gcc-ranlib -> gcc-ranlib-6 -rwxr-xr-x 1 root root 27168 6月 10 04:32 x86_64-linux-gnu-gcc-ranlib-6 lrwxrwxrwx 1 root root 22 2月 15 2018 x86_64-linux-gnu-gnatgcc -> x86_64-linux-gnu-gcc-6
可以对任意文件或目录创建他的多个软链接,可以链接不同文件系统的文件,在对符号文件进行读或写操作的时候,系统会自动把该操作转换为对源文件的操作,但删除链接文件时,系统仅仅删除链接文件,而不删除源文件本身,这一点类似于 Windows 操作系统下的快捷方式。
硬链接则是通过inode建立的链接,不同的硬链接都会指向同一个索引节点,即指向同一块文件区域。我们可以手动尝试建立一下软链接和硬链接。
# 创建一个源文件 AAA.txt 并写入内容 echo " > AAA.txt # 创建一个软链接 ln -s AAA.txt AAA-soft.txt # 创建一个硬链接 ln AAA.txt AAA-hard.txt # 我们读写源文件或链接文件,都能产生相同的变化,证明链接文件确实转到了源文件 # 查看三个文件的区别和联系 jeeyshe@jeeyshe-PC:~/Downloads$ ls -ihl |grep AAA 2122234 -rw-r--r-- 2 jeeyshe jeeyshe 27 6月 18 21:42 AAA-hard.txt 2098992 lrwxrwxrwx 1 jeeyshe jeeyshe 7 6月 18 21:43 AAA-soft.txt -> AAA.txt 2122234 -rw-r--r-- 2 jeeyshe jeeyshe 27 6月 18 21:42 AAA.txt # 可以发现源文件和硬链接文件的inode相同,和软链接文件inode不同,其他文件属性也完全相同(除了文件名) # 可以发现软链接有一个指向性标识 # 尝试删除源文件AAA.txt, 发现软链接失效,硬链接依然可读可写 # 重新创建源文件,且建立多个硬链接,发现无论删除多少硬链接或源文件,只要有一个硬链接存在则依然对文件可读可写
硬链接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬链接到重要文件,以防止“误删”的功能,只有当所有硬链接被删除后,文件的数据块及目录的连接才会被释放。
区别 | 软链接 | 硬链接 |
inode | 和源文件不同 | 和源文件相同 |
文件属性 | 和源文件是两个不同文件,明确显示连接关系 | 和源文件等同,除了文件名 |
跨文件系统 | 支持 | 不支持,只能是同一文件系统建立 |
版权声明 本文属于本站 原创作品,文章版权归本站及作者所有,请尊重作者的创作成果,转载、引用自觉附上本文永久地址: http://blog.lujianxin.com/x/art/3vltpzcv4mhl
上一篇:磁盘冗余——RAID
下一篇:Linux软连接和硬链接
猜你喜欢
文章评论区
作者名片
- 作者昵称:Jeyrce.Lu
- 原创文章:61篇
- 转载文章:3篇
- 加入本站:2046天
作者其他文章
站长推荐
友情链接
站点信息
- 运行天数:2047天
- 累计访问:164169人次
- 今日访问:0人次
- 原创文章:69篇
- 转载文章:4篇
- 微信公众号:第一时间获取更新信息