软链接和硬链接区别
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,类似一文件有多个文件名 |
文件属性 | 链接文件 | 与原文件完全平等关系 |
跨文件系统 | 支持 | 不支持 |
链接数目 | 软链接数目不会增加,文件大小不相同 | 硬链接文件显示的大小和源文件相同 |