yijiu 的博客

自由的风码

软链接和硬链接区别

软链接和硬链接区别

Linux 中一切皆文件:

  • 普通文件
  • 目录文件
  • 链接文件
  • 设备文件

文件描述符(file descriptor):
文件描述符是内核为了高效管理已经被打开的文件所创建的索引,其值是一个非负整数,用于指代被打开的文件,所有执行 I/O 操作的系统调用都通过文件描述符。

文件描述符 名称 符号常量 文件流
0 标准输入 STDIN_FILENO stdin
1 标准输出 STDOUT_FILENO stdout
2 标准错误 STDERR_FILENO stderr
nohup java -jar app.jar >log 2>&1 &

2>&1 中的 2 就是表示 标准错误 ,1 就是 标准输出,中间的 & 表示后面跟的数字是文件描述符而不是一个文件,防止 标准错误重定向到一个名为 1 的文件中。

Linux 系统用 ln 命令来创建文件链接:

# 硬链接
ln /root/file.txt ./file_1
#软链接
ln -s dir file

ln 指令默认创建的是硬链接,如果加入了 -s 参数,则会生成一个软链接。

硬链接 的作用是允许一个文件拥有多个有效路径名,它使得多个文件具有相同的 inode,事实上只要有文件(inode)指向一个区块,这个区块上的信息就不会从硬盘消失,硬链接可以通过此机制防止发生“误删”,只要存在硬链接,文件内容不会被删除,除非把所有硬链接删除完。

软链接 又叫 符号链接 ,软链接包含了另一个文件的路径名,包含的是对于文件的 inode 记录,软链接的 inode 和 源文件不相同。

软链接可以是 任意文件和目录,可以 链接不同文件系统的文件 ,甚至可以链接不存在的文件与目录。

删除软链接只会删除链接文件,不会删除文件本身,类似于 windows 系统的快捷方式。

总结:

软链接 硬链接
inode 软链接文件与源文件拥有不同的 inode 好,不相同的文件 硬链接和原文件共用一个 inode,类似一文件有多个文件名
文件属性 链接文件 与原文件完全平等关系
跨文件系统 支持 不支持
链接数目 软链接数目不会增加,文件大小不相同 硬链接文件显示的大小和源文件相同
留下你的脚步