文章详情页 您现在的位置是:网站首页>文章详情

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_FILENOstdin
1标准输出STDOUT_FILENOstdout
2标准错误STDERR_FILENOstderr


腾讯云服务器会跑一个云盾服务,查看他的定时任务你可以看到:

[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

文章评论区

作者名片

图片丢失
  • 作者昵称:Jeyrce.Lu
  • 原创文章:61篇
  • 转载文章:3篇
  • 加入本站:2046天

站点信息

  • 运行天数:2047天
  • 累计访问:164169人次
  • 今日访问:0人次
  • 原创文章:69篇
  • 转载文章:4篇
  • 微信公众号:第一时间获取更新信息